Клиент отправляет заголовок 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.