Cors 问题仅在“放置”时出现?
Posted
技术标签:
【中文标题】Cors 问题仅在“放置”时出现?【英文标题】:Cors issue occurs only when "put"? 【发布时间】:2017-04-11 15:46:56 【问题描述】:我正在构建一个使用 ng-resource 的 Angular 应用程序。服务 API 内置在 Asp.Net Core web api 中,并且已经启用了 CORS。
service.js 代码
.factory('D2Service', ['$resource', function ($resource)
return $resource('http://localHost:5001/api/D2/:id',
id: '@id' ,
update: method: 'PUT'
);
])
但是,控制器中的调用D2Service.update(model.d);
出现以下错误。
XMLHttpRequest 无法加载 http://localhost:5001/api/D2。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:8082' 因此不允许访问。
但是D2Service.get( id: model.id )....
运行时没有任何错误。为什么 'PUT' 有 CORS 问题,而 'GET' 没问题?
以下是使用 fiddler 监控时的请求/响应。
请求:
OPTIONS http://localhost:5001/api/D2 HTTP/1.1
Host: localhost:5001
Connection: keep-alive
Access-Control-Request-Method: PUT
Origin: http://localhost:8082
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/54.0.2840.99 Safari/537.36
Access-Control-Request-Headers: content-type
Accept: */*
Referer: http://localhost:8082/
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8
回复:
HTTP/1.1 204 No Content
Date: Sun, 27 Nov 2016 23:32:31 GMT
Server: Kestrel
【问题讨论】:
要正确支持 CORS,您的服务器需要响应预检请求 (OPTIONS) - 这就是 CORS 的工作原理 如何让服务器响应预检请求?我在 dotnet core 上使用 Asp.net core。 这就是谷歌的目的——搜索如何做这些事情——docs.microsoft.com/en-us/aspnet/core/security/cors 我已经添加了services.AddCors();
和 app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyHeader())` 但它仍然无法正常工作。
根据有关预检的文档部分,我看不到“options.addPolicy”
【参考方案1】:
要使预检请求生效,您的response
中应包含以下标头:
Access-Control-Allow-Origin: YOUR_DOMAIN
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: YOUR_CUSTOM_HEADERS
【讨论】:
如何让ngResource调用有Access-Control-Allow-Origin
的header?请求标头中缺少它。
这应该是一个响应头,应该在你的服务器中设置
现在我正在使用 nodejs 来托管 Angular 应用程序。我只是输入文件夹和npm start
。我在项目中搜索了Access-Control-Allow-Origin
,找到的唯一文件是文件夹bower_components\html5-boilerplate\dist
下的.htaccess
参考这篇文章如何在node.js中添加响应头http://***.com/questions/18310394/no-access-control-allow-origin-node-apache-port-issue
您在回答中说“响应”。你的意思是请求吗?以上是关于Cors 问题仅在“放置”时出现?的主要内容,如果未能解决你的问题,请参考以下文章
仅在 iOS 移动 Safari 中上传图像时出现错误的 CORS 失败
仅在文件上传中出现 Asp.Net Core API CORS 策略错误
仅在访问媒体文件时出现 Cors Header 错误,应用程序的其余部分工作正常(DRF、pythonanywhere、React)