新加:設置編碼方法
setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=gb2312")
語法
oXMLHttpRequest.setRequestHeader(bstrHeader, bstrValue);
參數
bstrHeader 字符串,頭名稱。
bstrValue 字符串,值。
還是不很明白
1、XMLObject.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
CONTENT-TYPE是什麼意思,application/x-www-form-urlencoded是什麼意思?
2、下面幾句setRequestHeader的含義?
setRequestHeader("Content-type", "application/x-www-form-urlencoded"); setRequestHeader("Content-length", paramsSend.length); setRequestHeader("Connection", "close"); |
解答:
通常在HTTP協議裏,客戶端像服務器取得某個網頁的時候,必須發送一個HTTP協議的頭文件,
告訴服務器客戶端要下載什麼信息以及相關的參數,如:
GET /bb.asp?www=1234 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.e4j.cn:89
Connection: Keep-Alive
Cookie: %C3%F7%CC%EC=%B0%CB;ASPSESSIONIDASDBSDRR=BLEDBIBBCGKBJAKJCFEJKGII
而 XMLHTTP 就是通過HTTP協議取得網站上的文件數據的,所以也要發送HTTP頭給服務器。
但是 XMLHTTP 默認的情況下有些參數可能沒有說明在HTTP頭裏,這是當我們需要修改或添加這些參數時就用到了
setRequestHeader 方法。
就比如如果上面這段HTTP頭文件內容是 XMLHTTP 提交默認的情況,當使用 setRequestHeader 方法後就這樣,如:
XMLObject.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
setRequestHeader "Connection", "close"
這時HTTP頭信息就應該是這樣了:
GET /bb.asp?www=1234 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
CONTENT-TYPE:application/x-www-form-urlencoded
/*默認情況下Ajax以 Content-Type: text/plain 提交數據,此時服務器將忽略POST實體部分的數據,所以服務端程序無法獲取POST數據指定爲Content-Type: application/x-www-form-urlencoded才行*/
Host: www.e4j.cn:89
Connection: close
Cookie: %C3%F7%CC%EC=%B0%CB;ASPSESSIONIDASDBSDRR=BLEDBIBBCGKBJAKJCFEJKGII
setRequestHeader方法只是XMLHTTP爲添加或修改HTTP頭提供的一個接口方法而已,
至於裏面的值則是HTTP協議的含義,當然也可以發自己的東西進去,即使IIS不能識別你的信息也不會報錯
如: setRequestHeader "MyName", "Supermanking"
雖然IIS不會報錯,但這個信息也可以有用,可以在ASP程序裏讀取HTTP頭信息分析是否有
MyName: Supermanking 信息,可根據你的需求來做處理,還有,CONTENT-TYPE:application/x-www-form-urlencoded含義是表示客戶端提交給服務器文本內容的編碼方式是URL編碼,即除了標準字符外,每字節以雙字節16進制前加個“%”表示
當然還有其他編碼方式,如:CONTENT-TYPE:multipart/form-data
至於:Content-length 就是表示提交的數據字節大小
http有幾種提交方式,其中比較常用的就是 GET 和 POST
這個標誌就放在HTTP頭開頭的地方,這樣講容易理解點
GET 方式是沒有提交內容的,所以 Content-length 在 GET 模式下是無效的.
GET 傳參數的方式就是通過虛擬地址傳送,如:
GET /bb.asp?www=1234 HTTP/1.1
參數全部就只有 "www=1234" 這麼多
//估計使用get傳參數是直接加在www=1234後面的
如果用POST的話就有些不同,POST是將參數放到HTTP後面的,就以上面的HTTP作範例,用POST的方法傳參數
POST /bb.asp HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
CONTENT-TYPE:application/x-www-form-urlencoded
Host: www.e4j.cn:89
Content-length: 8
//估計HTTP報文的數據部分
Connection: close
Cookie: %C3%F7%CC%EC=%B0%CB;ASPSESSIONIDASDBSDRR=BLEDBIBBCGKBJAKJCFEJKGII
www=1234
這時,數據就需要說明字節大小了
至於 Connection: Close,很明顯英文的意思是 連接:關閉
只是客戶端在提交數據時告訴服務器讓誰先關閉連接而已。
有些是自己的註解 轉原文鏈接