2015-11-20 172 views
54

我试图从我的应用程序向Tomcat服务器发送Ajax请求,但我得到这个错误(我的web应用程序在Chrome上运行):获取请求未通过访问控制检查:请求的资源上没有“Access-Control-Allow-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); 
      } 
    }); 
+8

必须在服务器上设置该标头,而不是客户端。 – dandavis

+1

在服务器上我应该在哪里保留它 – Labeo

+0

因为您没有真正使用响应,您可以使用普通的旧

标记发送数据而不是ajax,这应该在不修改服务器的情况下工作, – dandavis

回答

30

基本上,做一个跨域AJAX请求,请求的服务器应该允许资源的跨源共享(CORS)。你可以阅读更多有关在这里: http://www.html5rocks.com/en/tutorials/cors/

在您的情况,您要设置在实际上需要将其设置成http://localhost:8080/app服务器端代码客户端头。

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

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

http://stackoverflow.com/questions/41854438/how-to-use-api-key-along-with-cors-in -web-api我正在尝试使用CORS以及额外的安全性,但它不起作用。任何想法? – Si8

+0

OP说他使用Tomcat – Pere

+0

我有同样的问题埠,当我cuse crul可以返回成功,但在Ajax显示这个错误? – Araf

11

在请求一个REST服务的情况下:

你需要让REST服务带有Spring注释的端点上的CORS(资源的交叉来源共享):

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

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

相关问题