【问题标题】:$.ajax requests with CORS使用 CORS 的 $.ajax 请求
【发布时间】:2017-05-05 23:51:55
【问题描述】:

我在处理 AJAX 请求时遇到了问题。我收到以下错误:

错误:访问被拒绝

我尝试了这个 jQuery AJAX 请求:

$.support.cors = true;
$.ajax({
    url: 'http://testwebsite.com/test',
    type: "GET",
    dataType: 'json',
    contentType: 'application/json',
    crossDomain: true,
    headers: {
        'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
        'Access-Control-Allow-Origin': 'http://testwebsite/test',
        'Access-Control-Allow-Headers': '*',
        'Access-Control-Allow-Credentials': 'true'
    },
    xhrFields: {
        withCredentials: true
    },
    success: function(data) {
        alert("Data from Server" + JSON.stringify(data));
    },
    error: function(jqXHR, textStatus, errorThrown) {
        alert("You can not send Cross Domain AJAX requests: " + errorThrown);
    }
});

谁能告诉我我错过了什么。提前致谢。

【问题讨论】:

  • CORS 标头需要放在服务器返回的 response 中,而不是您的请求中。如果 CORS 标头不在响应中,那么您应该在服务器端添加它们。如果您无法控制服务器以添加这些标头,则您无法从 JS 发出请求。您需要在服务器端进行。
  • 您发送的那些标头实际上会导致 CORS 问题。

标签: javascript jquery ajax cors cross-domain


【解决方案1】:

正如rory-mccrossan 在评论中提到的那样,CORS 保护旨在使网站无法直接访问另一个网站的内容(在浏览器中),除非被访问的网站同意。

如果网站只需要发送一些标头来绕过防御,那将完全破坏 CORS 的意义

相反,您需要使用 CORS 代理。它是一个服务器,当收到像 yourCORSproxy.example.com/http://testwebsite/test 这样的请求时,它会加载页面并返回它,但允许 CORS(类似于普通代理,但启用了 CORS)。

其中一个 CORS 代理是 https://crossorigin.me,但在撰写本文时它已关闭。如果您只是创建自己的代理,它可能会更稳定。


tl;dr:testsite.test 应该在其响应中发送标头。您不应该根据您的请求发送标头。

【讨论】:

    猜你喜欢
    • 2015-02-27
    • 2016-11-01
    • 2012-12-20
    • 2015-12-15
    • 2013-12-24
    • 2014-09-13
    • 2015-03-01
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多