• Как настроить прямой доступ к php файлу в .htaccess?

    zkrvndm
    @zkrvndm
    maksam07,

    Файл .htaccess, расположенный в корневой папке сайта, имеет самый низкий приоритет. Его настройки перезаписываются файлами .htaccess из вложенных папок.

    Например, если в корневой папке есть файл .htaccess с запретом индексации папок, а во вложенной папке articles есть файл .htaccess с разрешением индексации, то для папки articles будет действовать разрешение индексации.
  • Как отключить повторное сжатие ответа CURL?

    zkrvndm
    @zkrvndm
    Алексей Денисов, тогда разбираться надо на живом примере, либо ты что-то недообъяснил, либо я что-то не понял. Другое дело, что я сейчас не готов на это бесплатно время своё тратить.
  • Как отключить повторное сжатие ответа CURL?

    zkrvndm
    @zkrvndm
    Алексей Денисов, если ты отдаёшь ответ без изменений, то алгоритм сжатия вообще не надо трогать, отдаёшь ответ в браузер с тем же заголовком кодировки с которым получил его от целевого сайта.
  • Как отключить повторное сжатие ответа CURL?

    zkrvndm
    @zkrvndm
    А зачем ты в браузер отдаешь ответ с указанием алгоритма сжатия? Не делай так, веб-сервер сам все нужное укажет и пропишет, ручками content-encoding прописывать смысла нет.
  • Как добавить класс при достижении блока?

    zkrvndm
    @zkrvndm
    Спроси ChatGTP на poe.com - это бесплатно.
    Такие простые вопросы отлично умеет решать ChatGPT.
  • Как правильно в php принять массив из formData js?

    zkrvndm
    @zkrvndm
    Rise, я понял про что вы. Да, это по идее будет работать если адрес запроса все время фиксированный, но лично у меня так никогда не бывает, всегда все запросы с временным штампом делаю.
  • Как правильно в php принять массив из formData js?

    zkrvndm
    @zkrvndm
    Rise, да, речь про браузер же. OPTIONS запросы делает браузер с целью проверки на соответствие CORS. А ты чего ожидал?
  • Как правильно в php принять массив из formData js?

    zkrvndm
    @zkrvndm
    Rise, убедись сам:
    xhr = new XMLHttpRequest();
    
    xhr.open('POST', 'https://nadim.work/test.php', true);
    
    xhr.setRequestHeader('Content-Type', 'aplication/json');
    
    xhr.onreadystatechange = function() {
    
        if (xhr.readyState === 4) {
    
            if (xhr.status === 200) {
    
                console.log('Ответ сервера:', xhr.responseText);
    
            }
    
        }
    
    }
    
    xhr.send('{}');
  • Как правильно в php принять массив из formData js?

    zkrvndm
    @zkrvndm
    Rise, которая работает только с fetch, ага. Вы что, думайте jQuery.ajax при cache: false зря штамп в адрес добавляет? Нет, эту либу умные люди писали, именно так максимально надежное игнорирование кеша получается.

    Что я неправильно делаю? Все я правильно делаю. Мне доводилось писать приложения которые за секунду шлют тысячи и тысячи запросов и проблема с тормозами из-за OPTIONS запросов это первое с чем я столкнулся и что мне пришлось решать.
  • Как правильно в php принять массив из formData js?

    zkrvndm
    @zkrvndm
    Rise, нет, обрати внимание на черепашку, черепашки не бывает при использовании дискового кеша. Просто поверь на слово, texp/plain оптимальный вариант, особенно когда надо отправить и принять много данных. Когда речь идет о тысячах и тысячах запросов с секунду, каждый лишние 50 мс. на счету. Не наш случай конечно, но тем не менее, на крупных портал это обычная практика так засылать данные на бэкенд.
  • Как правильно в php принять массив из formData js?

    zkrvndm
    @zkrvndm
    Rise, по поводу временных меток ты не прав, это единственный гарантированный способ сделать запрос без кеша, поэтому такой подходи используется широко и везде.
  • Как правильно в php принять массив из formData js?

    zkrvndm
    @zkrvndm
    Rise, вот, смотри: 64ae7aa23f3a5755409028.png

    Я отправил 3 POST запроса на один и тот же адрес и все три раза сначала шел предзапрос OPTIONS - не кешируется там ничего. Вместо того, чтобы вот так вот грузить сервер в 2 раза чаше, проще использовать text/plain! Такой запрос будет идти в 2 раза быстрее, за счет отсутствия предзапроса.
  • Как правильно в php принять массив из formData js?

    zkrvndm
    @zkrvndm
    Rise, не кешируется, если отправляем POST.
  • Как правильно в php принять массив из formData js?

    zkrvndm
    @zkrvndm
    Rise, кешируется, я не спорю, но касается это вроде бы только GET запросов, а при POST запросах кеширование по умолчанию не используется, более того я также указал, что это все касается только запросов на другие домены, при работе со своим сервером никаких предзапросов не будет, но тем не менее я часто на крупных портал вижу, что стандартной практикой считается отсылать JSON в кодировке text/plain - прям очень часто вижу такую практику.

    Также насчет кеша, замечу, что если мы игнорируем кеш при помощи добавления в адрес временной метки, ничего там кешироватся не будет и OPTIOS запросы будут всегда. Это опять же стандартная практика (насчет добавления временной метки для игнорирования кеша). Все же если мы отправляем запрос с данными, нам как правило не нужен ответ из кеша, а нужен актуальный ответ.

    К счастью, в данном вопросе стоит тег PHP поэтому и мой ответ касается исключительно PHP.
  • Что делает метод response.formData внутри fetch?

    zkrvndm
    @zkrvndm Автор вопроса
    Алексей Уколов, для теста сформировал корректрный и валидный документ multipart/form-data:
    await (await fetch('https://nadim.work/form_data_test.php')).formData(); // TypeError: Could not parse content as FormData.

    Но он все равно не парсится. Сам тестовый документ гарантированно валидный, делитель в Content-Type указан:
    HTTP/2 200 OK
    server: nginx-reuseport/1.21.1
    date: Wed, 12 Jul 2023 06:18:06 GMT
    content-type: multipart/form-data; boundary=---------------------------174400413723109252861051417751
    content-length: 412
    x-powered-by: PHP/7.4.33
    x-content-type-options: nosniff
    cache-control: no-store, no-cache, must-revalidate
    X-Firefox-Spdy: h2
    
    -----------------------------174400413723109252861051417751
    Content-Disposition: form-data; name="raz"
    
    Первый
    -----------------------------174400413723109252861051417751
    Content-Disposition: form-data; name="dva"
    
    Второй
    -----------------------------174400413723109252861051417751
    Content-Disposition: form-data; name="tri"
    
    Третий
    -----------------------------174400413723109252861051417751--
  • Что делает метод response.formData внутри fetch?

    zkrvndm
    @zkrvndm Автор вопроса
    Алексей Уколов, подожди. Вот это ключевой момент который меня интересует. Если я руками на стороне сервера сформирую корректный multipart/form-data то этот метод его прочитает?
  • Что делает метод response.formData внутри fetch?

    zkrvndm
    @zkrvndm Автор вопроса
    Rsa97, это метод доступен лишь после завершения запроса. Каким таким образом им можно что-то там перехватить и изменить, если запрос уже завершен?
  • Что делает метод response.formData внутри fetch?

    zkrvndm
    @zkrvndm Автор вопроса
    Алексей Уколов, нет, запрос уходит, если использовать метод .text() вместо .formData() то и ответ получаю.
  • Что делает метод response.formData внутри fetch?

    zkrvndm
    @zkrvndm Автор вопроса
    Мне вообще ничего не говорит толкование в документации. Я по прежнему не понимаю, как эта хрень должна работать и зачем она нужна. Да и вообще, как это возможно html документ из ответа представить в виде FormData? Или я неправильно понимаю и этот метод не для чтения ответа, а для чтения отправляемых данных? Поясните кто-нибудь, плиз.
  • Как правильно в php принять массив из formData js?

    zkrvndm
    @zkrvndm
    Rise, при POST запросах из браузера на сервер бывают 2 типа запросов: простые и сложные.

    Простые запросы это запросы с кодировками:
    1) application/x-www-form-urlencoded
    2) multipart/form-data
    3) text/plain

    Все остальные кодировки делают запрос сложными. При сложных запросах браузер перед отправкой запроса всегда делает так называемый предзапрос, в консоли такие запросы можно увидеть с пометкой OPTION и так уж выходит, если ты пропишешь application/json оно конечно будет работать, но браузер будет вместо одного запроса отправлять 2 запроса: сначала предзапрос (чтобы проверить соответствие CORS) и только потом сам запрос.

    P. S. Это касается только запросов на другие домены, если запрос на свой собственный домен идет, то можешь смело ставить application/json, предзапросов не будет, но если вдруг обработчик у тебя на другом сайте, лучше использовать text/plain - собственно это универсальное решение, проще сразу изначально везде так делать.

    https://learn.javascript.ru/fetch-crossorigin#nepr....