【问题标题】:Sending HTTP cross-domain request with AJAX使用 AJAX 发送 HTTP 跨域请求
【发布时间】: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。您不应该处理选项请求...

标签: javascript ajax http cross-domain cors


【解决方案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 无内容。感谢您的帮助!
猜你喜欢
  • 2016-10-02
  • 2012-12-04
  • 2016-12-01
  • 1970-01-01
  • 2020-06-30
  • 2013-03-02
  • 2017-06-17
  • 2013-01-05
  • 2018-04-12
相关资源
最近更新 更多