我正在开发一个 ajax 长轮询类型的应用程序,我想尽量减少我正在使用的带宽量。目前最大的成本之一是客户端 HTTP 标头。一旦我建立了连接并在客户端上存储了会话 ID,我真的不想再浪费任何带宽来传输冗余的 http 信息(例如浏览器类型、接受编码等)。在许多连接过程中,这很快就会增加大量数据!
我真的很想拿我的 XMLHttpRequest 并核对所有的标头,以便只有绝对最小值被传输到服务器。是否有可能做到这一点?
我正在开发一个 ajax 长轮询类型的应用程序,我想尽量减少我正在使用的带宽量。目前最大的成本之一是客户端 HTTP 标头。一旦我建立了连接并在客户端上存储了会话 ID,我真的不想再浪费任何带宽来传输冗余的 http 信息(例如浏览器类型、接受编码等)。在许多连接过程中,这很快就会增加大量数据!
我真的很想拿我的 XMLHttpRequest 并核对所有的标头,以便只有绝对最小值被传输到服务器。是否有可能做到这一点?
您对请求标头几乎没有控制权,但您仍然可以做一些事情 -
您可能需要考虑Web Sockets。支持非常好(IE10+)。
您可能能够在发送请求之前覆盖一些标准标头setRequestHeader()
,但浏览器可能不允许覆盖某些标头,并且似乎无法获取标头列表(除了要求服务器回显它们回给你)知道要尝试覆盖哪个。
我认为至少在某些浏览器中可以删除所有标题。在 chrome 中查看 gmail/calendar 应用程序与 google 后端之间的通信(在 firefox 中不一样),google 可能有一些用于 XMLHttpRequest 对象的隐藏 api,你会看到类似下面的输出(注意那里是没有请求标头部分):
Request URL:https://mail.google.com/mail/u/0/channel/bind?XXXXXXXXXXXXXX
Request Method:POST
Status Code:200 OK
Query String Parameters
OSID:XXXXXXXXXXXXX
OAID:XXXXXXXXX
VER:8
at:XXXXXXXXXXXXXX
it:30
SID:XXXXXXXXXXXX
RID:XXXXXXXXX
AID:XXXXXXXXXX
zx:XXXXXXXXXXXX
t:1
Request Payload
count=1&ofs=211&req0_type=cf&req0_focused=1&req0__sc=c
Response Headers
cache-control:no-cache, no-store, max-age=0, must-revalidate
content-encoding:gzip
content-type:text/plain; charset=utf-8
date:Tue, 09 Oct 2012 08:52:46 GMT
expires:Fri, 01 Jan 1990 00:00:00 GMT
pragma:no-cache
server:GSE
status:200 OK
version:HTTP/1.1
x-content-type-options:nosniff
x-xss-protection:1; mode=block