【问题标题】:Is persistent HTTP with HTTP/1.0 possible?具有 HTTP/1.0 的持久 HTTP 可能吗?
【发布时间】:2009-08-25 07:43:30
【问题描述】:

我正在使用 3G UMTS 连接。我正在尝试实现到我的服务器的 HTTP 隧道 它侦听端口 80(这样做是为了绕过客户端的防火墙)。问题是 ISP 的代理服务器支持不支持持久 HTTP 连接的 HTTP/1.0。

因此,在我的客户端/服务器之间的一次 http 请求/响应迭代之后,ISP 的代理会断开底层 TCP 连接。

我的客户端收到以下 HTTP 响应:

HTTP/1.0 200 OK  
Content-Type: application/octet-stream  
Content-Length: yyy  
X-Cache: MISS from ipmr5  
Proxy-Connection: close 
Content data

当我的服务器实际发送时:

HTTP/1.1 200 OK  
Connection: Keep-Alive  
Content-Type: application/octet-stream  
Content-Length: yyy  
Content data

有什么解决办法吗?

【问题讨论】:

  • 很少使用 GNU httptunnel 过期。当我通过以太网连接到服务器时效果很好。当我尝试通过 3G UMTS 连接到服务器时根本不起作用。服务器什么也没收到

标签: http proxy


【解决方案1】:

您始终可以使用 HTTPS。您将失去代理提供的任何好处(例如缓存),但您的所有 HTTP 标头将完全按照您发送它们的方式到达服务器。

【讨论】:

  • 我猜想发送到端口 80(端口 443 被阻止)的 HTTPS 流量无论如何都会通过 ISP 的代理。我不确定代理是否会让非 HTTP 流量通过。
  • 我已经成功使用了这个(我的网络运营商代理强制压缩了所有响应,客户端无法处理)。不过,在我的情况下,端口 443 没有被阻止......
【解决方案2】:

HTTP 1.0 代理(您的 ISP 似乎使用)不应与 Connection: Keep-Alive 一起使用以实现持久连接。其原因在RFC-2068(第 19.7.1 节)中进行了概述。基本上,简短的版本是您的服务器正在为您使用的代理类型发送无效的标头。

【讨论】:

  • 我没有选择使用ISP的代理,是ISP为我选择的。
  • 他的意思是..当您的客户端向服务器发送请求时,代理会将其降级为 http1.0(或应该是),在这种情况下,您的服务器不应响应一个http1.1
  • meandmycode:假设我的服务器响应 http/1.0。代理仍然会发送“代理连接:关闭”并拆除我的底层套接字,因为它不支持持久 http。
  • 很难说肯定,但我会说可能是的。
  • 但是你理解的http1.0不支持持久连接,proxy-connection头是http1.0持久化的非标准系统,如果它完全取决于客户端/代理支持这一点。例如,您可以让客户端发送 proxy-connection: keep-alive 标头并查看代理是否尊重客户端请求。
猜你喜欢
  • 1970-01-01
  • 2017-04-28
  • 2011-08-04
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
相关资源
最近更新 更多