获取请求未通过访问控制检查:请求的资源上不存在“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);
);
【问题讨论】:
该标头必须设置在服务器上,而不是客户端上。 在服务器上我应该把它保存在哪里 因为你并没有真正使用响应,你可以使用一个普通的旧 没有在这个代码中我不使用我需要在未来使用 如果 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”标头