使用jquery的CORS错误

mrH*_*rse 5 javascript ajax jquery cors

我目前正在使用cloudapp API开发一个项目,我正在使用jquery.这是我的代码:

 $.ajax({
            headers: { "Accept": "application/json"},
            type: 'GET',
            url: 'http://cl.ly/2wr4',
            crossDomain: true,
            success: function(data, textStatus, request){
                console.log(data);
            }
 });
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到200 OK响应并在Firefox中出现此错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://cl.ly/2wr4. This can be fixed by moving the resource to the same domain or enabling CORS.
Run Code Online (Sandbox Code Playgroud)

以及Google Chrome中的此错误:

XMLHttpRequest cannot load http://cl.ly/2wr4. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

并且没有任何内容记录到控制台.请问我该如何解决这个错误?

谢谢.

bac*_*ash 6

对于那些较新的编码人员来说,重要的一点是http://enable-cors.org/server.html上的所有内容都假定您有一台正在运行的服务器。如果您是新手,就像我最初一样,这些类型的答案无济于事。

如果您刚刚在计算机、CodePen 等上编写了一些代码,则无法进行配置。

服务器端和客户端脚本之间有一个重要的区别——你的 jquery 在客户端(即用户计算机/浏览器)运行,因此没有在那里设置标题这样的事情。

当我设置自己的服务器和自己的 PHP 文件(PHP 是服务器端,因此它在服务器上处理 - 而不是浏览器)时,我终于开始在这个问题上取得进展,并且能够很好地开始发出请求。

为那些被涉及答案的"Header set Access-Control-Allow-Origin "*"答案淹没的人添加这个。当我开始的时候也真的让我很沮丧。


cod*_*sed 5

CORS(跨源资源共享)是一种HTML5功能,允许一个站点访问另一个站点的资源,尽管它们位于不同的域名下.

CORS的W3C规范实际上可以很好地提供响应头的一些简单示例,例如密钥头Access-Control-Allow-Origin,以及必须用于在Web服务器上启用CORS的其他头.

如果您正在寻找有关如何在各种常见Web服务器上设置CORS的特定信息,请查看启用CORS共享网站.http://enable-cors.org/

根据您在上面提供的URL,我认为您无法控制该服务器.因此,它根本行不通.

即使您已启用crossDomain:true,服务器也应返回所需的标头,例如:

这是一个有效的服务器响应; CORS特定的标题是粗体

HTTP响应:

Access-Control-Allow-Origin: http://xyzcom
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: FooBar
Content-Type: text/html; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

你可以尝试的一件事是:

$.ajax({
            headers: { "Accept": "application/json"},
            type: 'GET',
            url: 'http://cl.ly/2wr4',
            crossDomain: true,
            beforeSend: function(xhr){
                xhr.withCredentials = true;
          },
            success: function(data, textStatus, request){
                console.log(data);
            }
 });
Run Code Online (Sandbox Code Playgroud)

否则,您需要联系API提供商.


Bas*_*sel 1

要修复该错误,您需要在服务器上启用 CORS。客户端希望看到发回的 CORS 标头以允许请求。它甚至可能发送预检请求以确保标头存在。

您可以为访问您服务器的一个、多个或所有域启用 CORS 服务器端。根据服务器的类型,配置会有所不同。

请参阅以下页面了解更多信息:http://enable-cors.org/server.html

您已经在上面的请求中启用了 CORS 请求,因此客户端您应该已准备就绪。