Клиент отправляет заголовок Proxy-Connection: Keep-Alive , промежуточный смарт-прокси видит этот заголовок и заменяет его Connection: Keep-Alive и отправляет на веб-сервер. Все хорошо и хорошо.

Что делать, если между ними есть 2 умных прокси. Когда первый перенаправляет Connection: Keep-Alive второму, второй не знает, что делать с этим заголовком. Он знает, что делать с Proxy-Connection , но не Connection: Keep-Alive . Просто пересылает заголовок на веб-сервер? Не вызовет ли это проблемы в текущем соединении TCP?

1 ответ1

1

Клиент отправляет заголовок Proxy-Connection: Keep-Alive, промежуточный смарт-прокси видит этот заголовок и заменяет его Connection: Keep-Alive и отправляет на веб-сервер.

Это не так, как это работает.

Proxy-Connection и Connection - это переходы за переходом, а не сквозные заголовки. Это означает, что клиент решает, что он хочет использовать постоянное соединение с прокси-сервером, а прокси-сервер решает, что он хочет иметь постоянное соединение с вышестоящим хостом (сервером или прокси). Дело не в том, что прокси-сервер хочет иметь постоянное соединение только потому, что этого хочет клиент, но это независимые решения. Фактически клиент может использовать одно и то же TCP-соединение с прокси для доступа к нескольким хостам, в то время как прокси-сервер должен создавать из него разные TCP-соединения, потому что ему нужен доступ к разным хостам.

Кроме того, Proxy-Connection в любом случае неверен и должен быть только Connection , независимо от того, является ли следующий переход прокси-сервером или целевым сервером. Смотрите также https://trac.tools.ietf.org/wg/httpbis/trac/ticket/158.

Не вызовет ли это проблемы в текущем соединении TCP?

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .