如何强制JQuery发出HTTP 1.0请求并关闭连接

如何强制JQuery发出HTTP 1.0请求并关闭连接,jquery,ajax,Jquery,Ajax,我是jQuery新手,希望使用连接关闭的纯HTTP 1.0发出POST请求,而不是使用当前保持活动状态的HTTP 1.1连接 下面是执行post的按钮的onClick处理程序 $( "#certGenBtn" ).click( function( event ) { $.ajax({ type: "POST", url: "http://localhost:9099/", data: { testVal : "data" }, success: function( data )

我是jQuery新手,希望使用连接关闭的纯HTTP 1.0发出POST请求,而不是使用当前保持活动状态的HTTP 1.1连接

下面是执行post的按钮的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)根据HTTP 1.1规范,
连接:close
是一个有效的头:

尝试使用headers键而不是beforeSend来添加它怎么样

.ajax({

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

});
2) jquery文档为beforeSend函数指定以下函数签名:

beforeSend 
Type: Function( jqXHR jqXHR, PlainObject settings )
因此,您也可以尝试将头添加到settings对象,而不是jqXHR对象

嗯,我测试了你的原始代码和我的建议,但没有一个成功。XMLHttpRequest规范似乎禁止设置连接头:

setRequestHeader(header,value)方法必须运行以下步骤:

如果header是其中一个的不区分大小写的匹配项,则终止这些步骤 以下标题:

。。。 联系

上面的头由用户代理控制,以使其能够控制 运输的这些方面。这在一定程度上保证了数据的完整性 范围。


非常感谢你!,我也得到了同样的结果,有没有办法强制HTTP 1.0而不是HTTP 1.1?AFAIK
Connection:keep-alive
是HTTP 1.1特有的,它不存在于HTTP 1.0中。“用户代理”是指您的浏览器。我认为您必须找到一种方法来配置您的浏览器以使用HTTP 1.0——但这有什么意义,除非js严格用于个人用途。我查看了Firefox 21.0,没有看到设置。我不是指用户代理部分,服务器收到的响应的第一行是
POST/HTTP/1.1
,表示浏览器使用HTTP 1.1协议而不是HTTP 1.0发出请求。如果我只能强制客户端使用HTTP 1.0而不是HTTP 1.1,那么保持活动的整个概念就会消失(连接头不在HTTP 1.0规范中)1)服务器不会收到响应。2) 您认为是谁发送了标题为POST/HTTP/1.1的请求(提示:您的浏览器,即“用户代理”?我想我们彼此误解了,服务器确实收到了请求,标题转储是在服务器端进行的。问题是服务器(一个非常有限的嵌入式服务器)不支持完整的HTTP 1.1功能集,并且由于浏览器保持连接处于活动状态,服务器在连接关闭之前不会获取post数据的最后部分。
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()