跨源资源共享 – CORS

321 阅读1分钟

什么是CORS

  1. CORS : Cross Origin Resource Share
  2. 所以国内的翻译是不准确的 Origin 不应该翻译成域,而是源, Origin 包含 协议,比如(http/https);域名,比如www.baidu.com;端口,如果有端口的话
  3. 之所以存在CORS问题,是因为浏览器中的XMLHttpRequest 和Fetch API都遵循same-origin policy 同源策略,但是图片,js,css是不需要遵循同源策略的

CORS 如何工作

  1. 对于简单请求(Simple Request)添加Http Headers,让服务器端描述哪个源可以读取该server的信息
    1. 服务器端响应中会有Header:Access-Control-Allow-Origin: *
    2. 浏览器端请求中要有Origin: www.example.com
  2. 对于对服务器资源有边际影响的请求(Preflighted Request),规范强制要求浏览器preflight该请求:通过Option请求向服务器获取允许的方法
    1. 浏览器先发送Option请求,并携带额外的Headers:
      1. Access-Control-Request-Method: POST
      2. Access-Control-Request-Headers: X-PINGOTHER, Content-Type

Springboot中服务器端CORS的配置

  1. 可以在方法级别或者类级别通过@CrossOrigin来配置Http Headers
  2. 可以在配置类中统一配置CorsRegistory类
  3. 文档资源:spring.io/guides/gs/r…