2011-03-01 82 views
2

我正在研究ajax長輪詢類型的應用程序,並且我想盡量減少我使用的帶寬量。現在最大的成本之一就是客戶端HTTP頭。一旦建立了連接並在客戶端存儲了會話ID,我並不想浪費傳輸冗餘HTTP信息的更多帶寬(例如瀏覽器類型,接受編碼等)。在很多連接的過程中,這很快就增加了大量的數據!從XMLHttpRequest中刪除HTTP標頭

我真的很想拿走我的XMLHttpRequest並且覈對所有的頭文件,這樣只有絕對最小值被傳送到服務器。是否有可能做到這一點?

+0

這是不可能的。這些頭文件不是由Javascript分析的,它們是在您的請求連接時由瀏覽器發送的。 – Cfreak 2011-03-01 19:18:21

+0

HTTP頭包含操作參數,其中大部分定義了請求;你可能會限制到絕對最低限度,但無法擺脫它們全部 – 2011-03-01 19:18:41

+0

@Ivanov,這是真的。但是有許多參數只是浪費。例如,如果我已經建立了會話,則不需要知道用戶代理,接受編碼,語言,字符集,主機或引用者。所有這些數據都可以從標題中安全地刪除,因爲我的服務器永遠不會使用它。它也增加了很多額外的空間!幾乎每包半千字節!我只是覺得它在那裏,如果我只是發送一個原始郵件+內容長度的數據包到服務器會更快樂。 – Mikola 2011-03-01 19:55:28

回答

3

你有超過請求頭的控制非常少,但你仍然可以做一些事情 -

  1. 減少cookie的大小。一般來說,你只需要會話ID,其他的一切都可以被刪除並存儲在服務器端。
  2. 通過保留短URL來最小化http引用。您的網頁網址越長,則需要通過http引薦來源發送的數據越多。一個訣竅是將數據存儲在片段標識符(#之後的url部分)中。片段標識符永遠不會發送到服務器,因此您可以在那裏保存幾個字節。
  3. 某些請求標頭只有在您之前設置了相應的響應標頭時纔會發送。例如,你can indirectly control the ETag and if-modified-since request headers

你可能要考慮Web SocketsSupport is pretty good (IE10+).

1

您可以覆蓋發送請求之前使用setRequestHeader()標準頭一些,但它是可能的瀏覽器可能不容許的一些更重要的,似乎是沒有辦法獲得標題列表(除了要求服務器將它們回顯給你)知道哪個嘗試覆蓋。

+0

是的,那就是我所害怕的。我想我應該補充一點,我試圖用chrome來做這件事,但最終引發了一系列例外,例如「拒絕設置不安全標題」User-Agent「」等。 – Mikola 2011-03-01 19:49:24

+0

爲了安全起見,某些標題不能是改變。 – sandino 2011-08-18 20:11:13

+2

請參閱這裏的每個瀏覽器的完整列表:http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest – sandino 2011-08-18 20:11:30

1

我認爲有可能至少在某些瀏覽器中刪除所有頭文件。 看看gmail/calendar應用程序和谷歌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 
+4

這裏沒有什麼關於*如何*做到這一點... – 2012-10-09 09:13:47