CORS(Cross-Origin resource sharing) 踩坑笔记 CORS是一种为了解决跨域请求而诞生的规范,详细规范参见 MDN 这里只介绍下一些需要注意的点: 跨域问题只存在于客户端有安全策略限制的情况,典型的如:浏览器,此时安全策略会阻止你进行跨域访问。如果是自己编写的程序,没有安全策略的限制,则不需要考虑跨域,所以CORS通常是前端考虑的问题。 CORS有简单请求和需预检的请求区分,只有需预检的请求才会发起OPTIONS,两者的区分参考上面的MDN。 如果需要对凭据进行操作时,比如 携带了Cookie,此时需要设置Access-Control-Allow-Credentials: true,否则请求将会被浏览器拒绝。 在Access-Control-Allow-Credentials: true时,无法设置字段为通配符*。其他情况下任意字段都可以设置为通配符。这是因为允许携带凭据会带来安全隐患,浏览默认会拒绝 Ajax 的跨域请求,通常 CSRF 攻击只能通过 script 标签、form 表单 或者 有副作用的 GET 来完成,但是一旦开启了 Access-Control-Allow-Credentials: true,且不限制 Origin 等,那么会有更大的风险遭受 CSRF 攻击。 Access-Control-Max-Age各个浏览器的最大时长不一样, Firefox caps this at 24 hours (86400 seconds). Chromium (prior to v76) caps at 10 minutes (600 seconds). Chromium (starting in v76) caps at 2 hours (7200 seconds). Chromium also specifies a default value of 5 seconds.