跨域的前世今生系列。
核心: 跨域是浏览器的安全策略
跨域的具体规则 可参考https://blog.csdn.net/qq_38128179/article/details/84956552
可能产生跨域问题的地方,本来只有浏览器,,浏览器在发送请求的 时候,根据请求的源的策略,来鉴定此请求是否跨域。
需要注意的点是。
本来,跨域只是个浏览器的 概念,但是根据spring最新版本 的 默认 跨域策略为。
首先请求中 是否 包含 Origin 这个 header。如不包含此 header,则认为请求不来源于浏览器/无需跨域验证。在有Origin header的时候,则根据服务端配置的 跨域规则来确定是否允许此请求。
如果想要请求一定能通过,则需要保证
- 请求 中没有 Origin 这个 header
- 服务端不进行跨域校验
- 请求 中有 Origin 这个 header,并且 服务端开启了 跨域校验 的情况下,则 需要 保证规则的命中。
另:某些前端的请求库,根据 http标准,在 发现自己是 跨域请求 的 同时 会先发送 一个 OPTION 请求。服务端必须响应此请求,返回一个httpstatus 200 的 空 的响应。错误范例:返回一个 404/或者当做正常请求处理,均会导致无法正常响应。
浏览器在发现本请求 没有 跨域 时,将 不会 携带 Origin 这个 header
出于浏览器安全策略 web 请求库 ,无法强制修改 header 中 的 Origin
在某些框架 下的应用 如 Electron 。其可以将web应用编译为 桌面版 应用,在没有设置的 情况下,其请求 可能会 自带 一个 Origin 的header,值是 类似于 chrom://12312312 的一串字符串,服务端无法配置一个特定的规则来识别 这个 Origin,需要Electron应用 手动配置此Origin为一个特定的 值,或者不传递此Origin。