【问题标题】:Getting request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource获取请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头
【发布时间】: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 端点是我无法控制的会发生什么

标签: javascript ajax


【解决方案1】:

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

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

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

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

【讨论】:

  • stackoverflow.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/

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 2019-02-24
    • 1970-01-01
    • 2016-02-23
    • 2018-05-06
    • 1970-01-01
    • 2017-11-11
    • 2017-04-09
    • 2017-09-08
    相关资源
    最近更新 更多