Почему браузер не может отправить запрос gzip?

StackOverflow https://stackoverflow.com/questions/424917

  •  05-07-2019
  •  | 
  •  

Вопрос

Если веб-сервер может отправить ответ gzip, почему браузер не может отправить запрос gzip?

Это было полезно?

Решение

Клиент и сервер должны договориться о том, как общаться; Часть этого - может ли связь быть сжатой. HTTP был задуман как модель запроса / ответа, и предполагалось, что первоначальное создание всегда будет иметь небольшие запросы и потенциально большие ответы. Сжатие не требуется для реализации HTTP, есть серверы и клиенты, которые его не поддерживают.

Сжатие HTTP осуществляется клиентом, говоря, что он может поддерживать сжатие, и если сервер видит это в запросе и поддерживает сжатие, он может сжать ответ. Чтобы сжать запрос, клиент должен иметь «предварительный запрос»; что фактически договорились о том, что запрос будет сжат, ИЛИ ему потребуется сжатие в качестве поддерживаемой кодировки для ВСЕХ запросов.

* ОБНОВЛЕНИЕ февраль '17 * Прошло 8 лет, но, как отмечает @ Phil_1984_, третье возможное решение - клиент и сервер договориться о поддержке сжатия, а затем использовать ее для последующих запросов. Фактически, такие вещи, как HSTS, работают именно так с клиентским кэшированием, которое сервер ожидает только на TLS и игнорирует все незашифрованные ссылки. HTTP был явно разработан, чтобы быть без сохранения состояния, но мы перешли этот уровень к этому моменту.

Другие советы

Клиент не может заранее знать, что сервер будет понимать запрос gzipped, но сервер может знать, что клиент его примет.

Может, при условии, что это может гарантировать, что сервер примет это. Это может означать использование запроса OPTIONS.

Есть много вещей, которые веб-браузеры могут делать (например, конвейерная обработка), которые они не делают. Разработчики веб-браузера учитывают последствия изменения совместимости.

В гетерогенной среде существует множество различных веб-серверов и конфигураций. Внесение изменений в работу клиента может нарушить некоторые из них.

Возможно, только 1% серверов могут принимать gzip-запросы, но, возможно, некоторые из них сообщают, что они это делают, но не могут правильно их принять - поэтому пользователям будет отказано в загрузке файлов на эти сайты.

Исторически было много неработающих клиент-серверных реализаций - в течение долгого времени gzip-ответы были сломаны в основных веб-браузерах (к счастью, в настоящее время их больше нет).

Таким образом, вы получите черные списки пользовательских агентов или серверов (или доменных имен), где эти параметры были автоматически отключены, что неприятно.

Потому что он не знает, что сервер может принять это. У транзакции HTTP есть единственный запрос, отправленный клиентом, сопровождаемый ответом. Одна из вещей, которую отправляет клиент, это то, какую кодировку / сжатие он может поддерживать. Затем сервер может решить, как сжать ответ. У клиента нет такой роскоши.

Если вы пишете веб-приложение, я предполагаю, что вы контролируете то, что отправляется клиенту и что отправляется обратно от клиента.

Было бы достаточно легко написать реализацию gzip на javascript, которая сжимает данные post, отправляемые на сервер.Сервер может иметь фильтр (термин j2ee), который знает, что данные клиента отправляются сжатыми, этот фильтр распаковывает данные и затем передает данные сервлету (или классам действий в Struts), которые считывают данные как обычно, напримерзапрос.getParameter(...).

Это кажется совершенно логичным и выполнимым, если вы все контролируете.Как упоминалось в других сообщениях, вы не могли полагаться на браузер, чтобы сделать это автоматически, но поскольку вы пишете веб-страницы, вы можете заставить браузер выполнить требуемое сжатие (с небольшой работой).

Энди.

HTTP разработан таким образом:

  • Клиент излагает свой запрос простым текстом (в том числе, если может понять сжатые ответы).
  • Сервер отвечает в кодировке propper (сжатой или нет).

НО В ТАКОМ ДИЗАЙНЕ клиент не может отправлять сжатые запросы, потому что он не знает, поймет ли это сервер заранее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top