获取请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】获取请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头【英文标题】:Getting request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource 【发布时间】:2016-02-22 13:18:52 【问题描述】:

我正在尝试从我的应用程序向 Tomcat 服务器发送 Ajax 请求,但是我收到了这个错误(我的网络应用程序正在 Chrome 上运行):

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应的 HTTP 状态代码为 403。

我尝试过使用

'Access-Control-Allow-Origin' : 'http://localhost:8080/app',

但是没有用。

我的 Ajax 代码:

 var arr = [1];
   $.ajax( 
   url: 'http://localhost:8080/app',
   type: 'POST',
   contentType:'application/json',
   headers: 
   'Access-Control-Allow-Origin' : 'http://localhost:8080',
   ,
       data: JSON.stringify(arr[0]),
       success: function(data)
        //On ajax success do this
             alert(data);
          
     );

【问题讨论】:

该标头必须设置在服务器上,而不是客户端上。 在服务器上我应该把它保存在哪里 因为你并没有真正使用响应,你可以使用一个普通的旧
标签来发送数据而不是 ajax,它应该可以在不修改服务器的情况下工作,
没有在这个代码中我不使用我需要在未来使用 如果 REST 端点是我无法控制的会发生什么 【参考方案1】:

基本上,要进行跨域 AJAX 请求,请求的服务器应该允许跨域资源共享 (CORS)。您可以从这里阅读更多相关信息: http://www.html5rocks.com/en/tutorials/cors/

在您的场景中,您正在客户端中设置标头,实际上需要将其设置为 http://localhost:8080/app 服务器端代码。

如果您使用的是 php Apache 服务器,那么您需要在您的 .htaccess 文件中添加以下内容:

Header set Access-Control-Allow-Origin "*"

【讨论】:

***.com/questions/41854438/… 我正在尝试使用 CORS 以及额外的安全性,但它不起作用。有什么想法吗? OP 说他正在使用 Tomcat 我有同样的问题,当我 cuse crul 但在 ajax 中显示此错误时,api 可以返回成功? 我有同样的问题,当我 cuse crul 但在 ajax 中显示此错误时,api 可以返回成功? 这不允许所有来源吗?这不应该真的仅限于预期的起源吗?【参考方案2】:

如果请求 REST 服务:

您需要使用 Spring 注释在 REST 服务的端点上允许 CORS(资源的跨源共享):

@CrossOrigin(origins = "http://localhost:8080")

很好的教程:https://spring.io/guides/gs/rest-service-cors/

【讨论】:

以上是关于获取请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

请求的资源上不存在“Access-Control-Allow-Origin”标头。或 对预检请求的响应未通过访问控制检查

AWS - 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

.NET 5 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

Angular2对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

对预检请求的响应未通过访问控制检查错误