2013-06-12 124 views
1

我是新來的jQuery,並希望使用普通HTTP 1.0連接關閉來發出POST請求,而不是當前保持活動狀態的HTTP 1.1連接。如何強制JQuery發出HTTP 1.0請求並關閉連接

下面是執行該帖子的按鈕的onClick處理程序。

$("#certGenBtn").click(function(event) { 
$.ajax({ 
    type: "POST", 
    url: "http://localhost:9099/", 
    data: { testVal : "data" }, 
    success: function(data) { 
       alert("whoops"); 
      }, 
    beforeSend: function(xhr) { 
        xhr.setRequestHeader("Connection", "close"); 
       } 
    }); 
}); 

原始輸出傾倒在服務器端如下:

POST/HTTP/1.1 
Host: localhost:9099 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0 
Accept: */* 
Accept-Language: en-ZA,en-GB;q=0.8,en-US;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Referer: http://localhost/ 
Content-Length: 12 
Origin: http://localhost 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 

testVal=data 

連接關閉頭被「忽略」和連接保持開放的服務器,以便最後一行testVal=data只通過一次我重新加載頁面(我認爲這是因爲連接然後由瀏覽器關閉)。我認爲這是非常簡單和/或愚蠢的,我失蹤,但在文檔中看不到任何東西。

回答

1

1)根據HTTP 1.1規範,Connection: close是一個有效的標題:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

如何試圖用頭鍵代替beforeSend增加嗎?

.ajax({ 

    .... 
    headers: {Connection: close}, 

}); 

2)jQuery的文檔的beforeSend功能指定以下函數簽名:

beforeSend 
Type: Function(jqXHR jqXHR, PlainObject settings) 

所以您也可以嘗試添加標題到設置對象而不是jqXHR對象。

好吧,我測試了你的原始代碼以及我的建議,但都沒有成功。它看起來像的XMLHttpRequest規範禁止設置連接頭:

的setRequestHeader(標題,值)方法必須執行這些步驟:

終止這些步驟,如果報頭是用於 一個不區分大小寫匹配以下標題:

... 連接 ...

上述標題由用戶代理控制,以讓它控制 壽運輸方面。這保證了數據完整性達到某種程度。
http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method

+1

非常感謝你!我 對我身邊相同的結果,有沒有辦法迫使HTTP 1.0而不是HTTP 1.1嗎? AFAIK'連接:keep-alive'是一個HTTP 1.1特有的,它不在HTTP 1.0中。 – twocents

+0

「用戶代理」是指您的瀏覽器。我認爲你必須找出一種方法來配置你的瀏覽器使用HTTP 1.0--但是,除非js只是個人使用,否則有什麼意義。我環顧了Firefox 21.0,並且沒有看到設置。 – 7stud

+0

我不是指用戶代理部分,服務器接收到的響應的第一行是'POST/HTTP/1.1',表示瀏覽器使用HTTP 1.1協議而不是HTTP 1.0發出請求。如果我只能強制客戶端使用HTTP 1.0而不是HTTP 1。1,那麼保持活躍的整個概念就會消失(Connection頭部不在HTTP 1.0規範中)[link](http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec。 html) – twocents

1
var xhr = $.ajax({ 
    type: "POST", 
    url: "some.php", 
    data: "name=John&location=Boston", 
    success: function(msg){ 
     alert("Data Saved: " + msg); 
    } 
}); 

//kill the request 
xhr.abort()