使用 AJAX 发送 HTTP 跨域请求
Posted
技术标签:
【中文标题】使用 AJAX 发送 HTTP 跨域请求【英文标题】:Sending HTTP cross-domain request with AJAX 【发布时间】:2014-11-24 03:37:40 【问题描述】:我正在尝试使用 AJAX 的 PUT 方法发送 HTTP 跨域请求。
为此,我正在使用这个:
$.ajax(
url: ipv6Nodo+"/config?param=led",
crossDomain: true,
type: 'PUT',
data: "ls=ON",
success: function(data)
// Do something with the result
console.log(data);
);
我在中间嗅探,我发现我真的在使用 OPTIONS 方法发送请求。这不是问题,因为在服务器上我可以类似地接受 PUT 或 OPTIONS。问题是payload请求是空的,没有ls=ON
,我怎么想要。如果我将此请求发送到同一个域,我可以看到有效负载。有什么问题?
提前致谢
【问题讨论】:
“抛出请求”?? 他们首先提出一个选项请求,询问是否允许 PUT。您不应该处理选项请求... 【参考方案1】:与Cross Origin Resource Sharing 一起使用的OPTIONS
请求没有负载。这是一个“预检”请求,以确定服务器是否允许来自您的来源的 CORS。使用正确的 CORS 标头响应 OPTIONS
请求后,您将获得带有数据的 PUT
请求。
查看链接了解详情,但基本上:
浏览器发送带有 CORS 请求标头的OPTIONS
。
服务器决定是否可以接受来自该来源的请求,如果可以,则使用适当的 CORS 响应标头进行响应。
浏览器以实际的PUT
响应。
这对您的客户端 ajax
代码(但不是您的服务器代码)是透明的。
【讨论】:
所以如果我在服务器上启用 CORS,我应该能够发送 PUT 请求 如果您使用的是correctly supports CORS 的浏览器,可以。所以,不是 IE8 或 IE9,它支持它,而是通过一个特殊的XDomainRequest
对象而不是 XMLHttpRequest
,jQuery 无法解决的浏览器不一致问题(尽管如果你搜索,你可以找到代码来做到这一点)。
你能告诉我来自服务器的 CORS 响应如何吗?我知道它必须有标题Access-Control-Allow-Origin:
,但我不知道其余的应该怎么做。基本上我想知道它是 HTTP/1.1 200OK 还是类似的。
它必须是 HTTP 204 无内容。感谢您的帮助!以上是关于使用 AJAX 发送 HTTP 跨域请求的主要内容,如果未能解决你的问题,请参考以下文章