You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
1.6 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# CORS(跨域资源共享)
> 请先认真阅读以下文档
[*跨源资源共享*](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS) [ASP.NET Core 启用CORS](https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-3.1)
## 问题由来
> 浏览器的同源策略:出于安全考虑,浏览器限制了不周源
## 原理
![原理](Assets/CORS原理.png)
> 客户端:浏览器请求时,请求头携带上 Origin 标签(只包含请求站点信息,不包含路径信息。比如 http://localhost:5002),一般由浏览器或请求程序自动判断是否跨域而自动设置,无需人工参与,但是为了方便测试等,也可以强制添加。
> 服务端 asp.net core 设置CORS后如果请求头携带有 Origin 标签则在响应头中添加CORS标签明确浏览器可以跨域。
## 坑一服务端设置好Cors后直接访问、Swagger、PostMan等工具测试时响应头中并不返回 Cors相关标头
## 测试CORS
### 先确保非跨域时正常避免非跨域问题引发CORS错误
> 跨域请求时只要响应头不包含跨域信息则浏览器控制台优先报CORS错误即使是因为404、5xx服务端异常等原因。所以非跨域问题也能引起跨域报错。
### Postman、Fiddler .net client 等客户端测试
> 使用Postman、Fiddler、.net clien等第三方客户端测试CORS时要注意因为在进行请求时可能不会自动加跨域请求头Origin所以默认是非跨域请求确保跨域的话要手动加Origin请求标头。
### 预检(Option)请求
> 非简单请求如PUT、DELETE
## IIS CORS 模块