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 问题仅在“放置”时出现?的主要内容,如果未能解决你的问题,请参考以下文章

[画布仅在预加载图像时出现CORS问题

仅在 iOS 移动 Safari 中上传图像时出现错误的 CORS 失败

仅在文件上传中出现 Asp.Net Core API CORS 策略错误

仅在访问媒体文件时出现 Cors Header 错误,应用程序的其余部分工作正常(DRF、pythonanywhere、React)

从其自己的域中获取api时出现CORS错误

当我尝试将 google place 自动完成 API 与 Axios 一起使用时出现 CORS 错误