【发布时间】:2011-03-01 19:11:39
【问题描述】:
我正在开发一个 ajax 长轮询类型的应用程序,我想尽量减少我正在使用的带宽量。目前最大的成本之一是客户端 HTTP 标头。一旦我建立了连接并在客户端上存储了会话 ID,我真的不想再浪费任何带宽来传输冗余的 http 信息(例如浏览器类型、接受编码等)。在许多连接过程中,这很快就会增加大量数据!
我真的很想只使用我的 XMLHttpRequest 并核对所有标头,以便只有绝对最小值被传输到服务器。可以这样做吗?
【问题讨论】:
-
不可能。标头不由 Javascript 解析,它们是在为您的请求建立连接时由浏览器发送的。
-
HTTP头包含操作参数,其中大部分定义了请求;您可能可以限制到绝对最小值,但无法全部摆脱它们
-
@Ivanov,这是真的。然而,有许多参数只是浪费。例如,如果我已经建立了一个会话,我不需要知道用户代理、接受编码、语言、字符集、主机或引用者。所有这些数据都可以安全地从标头中删除,因为我的服务器无论如何都不会使用它。它也增加了很多额外的空间!每个数据包几乎半千字节!我只是对它的存在感到生气,如果我可以将原始帖子 + 内容长度数据包发送到服务器会更开心。
-
HTTP 是无状态的。每个请求都必须有完整的信息,否则你就破坏了 HTTP 的精神。浏览器正在为您的用例创建一个新协议(“Web Sockets”),但这需要一段时间才能稳定下来。
-
XmlHttpRequest 规范包含一整套不允许被用户覆盖的 headers,包括 User-Agent 和 Accept-*:w3.org/TR/XMLHttpRequest/#the-setrequestheader-method
标签: javascript ajax http xmlhttprequest