В запросе xhr говорится: «Показаны предварительные заголовки», а в ответе есть заголовки CORS:
Access-Control-Allow-Methods: POST
Access-Control-Allow-Origin: *
Также я пытался использовать тот же порт (поэтому технически CORS не требуется). Проблема сохраняется. Как ни странно, когда я использую доменное имя вместо ip, иногда проблема исчезает (но не всегда).
Пока отображается «Предварительные заголовки показаны», заголовок запроса не будет отправлять Accept-Encoding: gzip, deflate на сервер, отключая сжатие.
Поясню, я не устанавливал Accept-Encoding для своих запросов. Я сказал, что Accept-Encoding не будет отправлен, когда представлено «Показаны предварительные заголовки».
Поясню, я не устанавливал Accept-Encoding для своих запросов. Я сказал, что Accept-Encoding не будет отправлено, когда представлены «Предварительные заголовки показаны».
Когда вы видите «Показаны предварительные заголовки», это почти всегда означает, что браузер не (повторно) отправляет запрос ресурса по сети, а вместо этого либо (повторно) загружает ранее кэшированный ответ из кеша браузера, либо иначе весь запрос отменяется. Проверьте панель «Сеть» в инструментах разработки браузера.
@sideshowbarker это запрос xhr, поэтому я сомневаюсь, что он кэшируется ... также я получил данные, просто не сжатые данные.
На самом деле запросы XHR кэшируются браузерами. Очень часто. И браузер кеширует несжатые данные, потому что сам браузер их автоматически распаковывает. В общем, когда браузер извлекает любой сжатый ответ, он не собирается сохранять необработанный сжатый ответ; вместо этого он будет хранить несжатый результат ー потому что это позволяет избежать затрат на его повторную распаковку каждый раз, когда он перезагружается из кеша.
Как тогда запрос xhr возвращал разные результаты каждый раз, когда я делаю запрос?
Хорошо, да, если он каждый раз возвращает другой результат, то, конечно, в такие моменты он явно не загружается из кеша.
Да, но отображаются «Предварительные заголовки» (только в Chrome), и результат не сжимается.





Это оказывается ошибкой. Даже если запрос отличается, браузер считает, что это кешированный запрос, и лишь частично отправляет запрос в виде кешированного xhr (он не отправляет заголовки, а отправляет тело).
Решение: добавление случайной строки в заголовок.
Accept-Encoding — это «запрещенное имя заголовка». fetch.spec.whatwg.org/#forbidden-header-name Это означает, что браузеры не позволят вам установить его в коде JavaScript внешнего интерфейса. Это один из заголовков запросов, которые браузеры контролируют сами. То есть, по сути, это зарезервированный заголовок ー зарезервированный браузерами для собственного использования.