如何强制JQuery发出HTTP 1.0请求并关闭连接
我是jQuery新手,希望使用连接关闭的纯HTTP 1.0发出POST请求,而不是使用当前保持活动状态的HTTP 1.1连接 下面是执行post的按钮的onClick处理程序如何强制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 )
$( "#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()