POSTMAN中的CORS测试[已关闭]

wj8zmpe1  于 2023-08-05  发布在  Postman
关注(0)|答案(1)|浏览(135)

**已关闭。**此问题需要debugging details。它目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答这个问题。
5天前关闭。
Improve this question
我用C#编写了API控制器,它托管在IIS中。Access-Control-Allow-Origin在此控制器的IIS的响应Http标头中设置。CORS也在代码中启用。当我在请求头中添加Origin键后使用Postman测试API时,我得到了500 Internal Server错误,并且在响应头中有两个Access-Control-Allow-Origin键,第一个在POSTMAN中的Origin键中提到了值,第二个在服务器端提到了值。如果我没有在请求头中使用Origin键,则API工作正常。
我尝试使用web.config和删除Access-Control-Allow-Origin来实现,但响应相同。在服务器端添加Access-Control-Allow-Origin中未提及的源密钥后,响应应类似于未授权,并且在POSTMAN中响应头的Access-Control-Allow-Origin中不应存在origin中传递的值。

z18hc3ub

z18hc3ub1#

有两种标准方法来设置对CORS的支持。

静态,其中服务器 * 总是 * 发送相同的Access-Control-Allow-*头(无论请求的任何内容)。

这通常用于您想要使用通配符(Access-Control-Allow-Origin: *)来使网站上的客户端代码可以访问API的情况,或者您只需要提供单个源(例如,Access-Control-Allow-Origin: http://example.com(对于api.example.com)。
它具有配置简单的优点。

动态,其中服务器注意请求中的Origin头部,然后 * 可选地 * 添加Access-Control-Allow-Origin: $valueOfThatRequestHeader,如果源在允许的源列表中。

当您需要支持多个来源而不是每个来源时,就需要这种方法。
我得到500内部服务器错误和有两个访问控制允许起源关键字在响应头,第一个有值中提到的起源关键字在POSTMAN和第二个有值中提到的服务器端。
出现此问题的原因似乎是您试图使用IIS配置Access-Control-Allow-Origin实现静态值**,并使用ASP.NET的Web配置**实现动态值。

选择一个(基于我之前对两种方法的描述)。

在服务器端添加Access-Control-Allow-Origin中未提及的源密钥后,响应应类似于Unauthorized
虽然服务器端代码可能会注意Origin头,并在它不在允许列表中时发出401 Unauthorized响应状态,但这样做是非常不典型的。
如果Access-Control-Allow-Origin响应头与源不匹配,则浏览器将拒绝JS访问数据。
请求可能试图在服务器上进行更改(例如但是任何这样的请求都应该触发规则,使其成为preflighted,这样你就只能得到preflight OPTIONS请求(然后缺少匹配的Access-Control-Allow-Origin响应头将导致浏览器阻止POST / PUT / etc请求)。

  • (一个设计糟糕的API可能缺少授权头/当它应该使用POST时使用GET/否则不需要preflight......请确保您的API不是这样设计的)*

如果请求不是来自浏览器,那么Origin头很容易被伪造,所以使用一个authn是无用的。

**不要期望不匹配的Origin会触发401。不要浪费精力试图让它触发一个。

相关问题