2

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

我真的很想拿我的 XMLHttpRequest 并核对所有的标头,以便只有绝对最小值被传输到服务器。是否有可能做到这一点?

4

3 回答 3

3

您对请求标头几乎没有控制权,但您仍然可以做一些事情 -

  1. 减小 cookie 的大小。一般来说,您只需要会话ID,其他所有内容都可以消除并存储在服务器端。
  2. 通过保留一个简短的 URL 来最小化 http 引荐来源网址。您的页面 url 越长,通过 http 引荐来源网址发送的数据就越多。一种技巧是将数据存储在片段标识符中(# 之后的 url 部分)。片段标识符永远不会发送到服务器,因此您可以在那里节省一些字节。
  3. 某些请求标头仅在您之前设置了相应的响应标头时才会发送。例如,您可以间接控制 ETag 和 if-modified-since 请求标头

您可能需要考虑Web Sockets支持非常好(IE10+)。

于 2011-03-01T20:05:01.030 回答
1

您可能能够在发送请求之前覆盖一些标准标头setRequestHeader(),但浏览器可能不允许覆盖某些标头,并且似乎无法获取标头列表(除了要求服务器回显它们回给你)知道要尝试覆盖哪个。

于 2011-03-01T19:24:54.700 回答
0

我认为至少在某些浏览器中可以删除所有标题。在 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
于 2012-10-09T09:05:37.887 回答