Есть ли поле заголовка HTTP / хак, чтобы сообщить браузеру НЕ передавать свои запросы? - PullRequest
0 голосов
/ 25 августа 2009

Я реализую минималистичный веб-сервер на микроконтроллере. Когда у меня есть несколько изображений (или CSS / JS) на веб-странице, браузер создает несколько соединений и извлекает их. Но микроконтроллер не может догнать это. Есть ли способ сказать браузеру прекратить конвейерную обработку и получать их один за другим?

Примечание :: «Соединение: закрыть» уже установлено.

Ответы [ 3 ]

2 голосов
/ 25 августа 2009

«конвейеризация» - это нечто другое; это означает, что пользовательский агент отправляет дополнительные запросы по тому же соединению, хотя первый еще не завершен (см. http://greenbytes.de/tech/webdav/rfc2616.html#pipelining).

«Соединение: закрыто» не имеет значения; при этом: есть ли причина, по которой вы не хотите, чтобы соединение использовалось повторно?

Что касается вашего вопроса: нет, я не думаю, что вы можете помешать клиентам сделать это. Вы пытались ограничить максимальное количество открытых соединений на вашем сервере?

2 голосов
/ 25 августа 2009

Я думаю, что Connection: close - это совершенно неверное сообщение. Когда браузер создает несколько соединений, он точно не передает свои запросы - так что ISTM, что вы хотите браузер для конвейеризации, вместо создания параллельных соединений.

Так что одним из шагов к этому было бы использование HTTP 1.1 и сохранение соединения открытым. Затем браузер повторно использует TCP-соединение для дальнейших запросов. Это должно позволить микроконтроллеру наверстать упущенное.

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

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

1 голос
/ 21 ноября 2012

Та же проблема ... Однако Firefox загружает мой сайт очень быстро, в отличие от Opera. Я не изобрел ничего лучше, чем отклонение соединений на начальном этапе: SYN. Я просто отвечаю с флагом RST. Но, вероятно, это не устраивает Opera. Мое устройство поддерживает только два одновременных подключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...