从XMLHttpRequest中删除HTTP标头

时间:2011-03-01 19:11:39

标签: javascript ajax http xmlhttprequest

我正在开发一个ajax long轮询类型的应用程序,我想尽量减少我正在使用的带宽量。现在最大的成本之一是客户端HTTP标头。一旦我建立了连接并在客户端上存储了会话ID,我真的不想浪费更多带宽传输冗余的http信息(例如浏览器类型,接受编码等)。在许多连接过程中,这很快就会增加大量数据!

我真的想只需要使用我的XMLHttpRequest并对所有标头进行核对,以便只将绝对最小值传输到服务器。有可能这样做吗?

3 个答案:

答案 0 :(得分:3)

您几乎无法控制请求标头,但您仍然可以做一些事情 -

  1. 缩小Cookie的大小。一般来说,您只需要会话ID,其他所有内容都可以消除并存储在服务器端。
  2. 通过保留一个简短的URL来最小化http referrer。您的网页网址越长,通过http引荐来源发送的数据就越多。一个技巧是将数据存储在片段标识符(#之后的url部分)中。片段标识符永远不会发送到服务器,因此您可以在那里保存几个字节。
  3. 只有先前设置了相应的响应标头,才会发送一些请求标头。例如,您can indirectly control the ETag and if-modified-since request headers
  4. 您可能需要考虑Web SocketsSupport is pretty good (IE10+).

答案 1 :(得分:1)

您可以在发送请求之前使用setRequestHeader()覆盖某些标准标头,但浏览器可能不允许覆盖某些标准标头,似乎没有获取标题列表的方法(除了要求服务器回复给你)以知道要尝试覆盖哪些标题。

答案 2 :(得分:0)

我认为至少在某些浏览器中删除所有标头是可能的。 看看gmail /日历应用程序与Chrome中谷歌后端之间的通信(在Firefox中不一样) 谷歌有可能为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