美文网首页
CORS之跨域解决不只有域名

CORS之跨域解决不只有域名

作者: 许文同学 | 来源:发表于2018-07-15 14:37 被阅读0次

前后端分离开发基本都会有跨域问题,一般服务端加个Access-Control-Allow-Origin就可以了,可是有些情况单纯设置Access-Control-Allow-Origin并不能解决问题。
这是为什么呢?其实跨域并不只是域名鉴别,它有着一整套的方案,就是 跨域资源共享(CORS)。关于CORS本文不做赘述,文末会给出一些相关参考链接。
Access-Control-Allow-Origin 指的是允许来自指定源的跨域访问,那么是否还有其它影响因素呢?

注:确切来说并不是限制访问,因为在跨域请求中,请求已经发送,服务端也执行了相应的动作。
   只是浏览器根据服务端返回的CORS信息来决定是否把数据给请求者。

restful接口跨域中我们经常会遇见OPTIONS的请求,如果跨域配置正确才会发起一次真正的请求,但有些接口却是直接就能发起请求的。
这就是CORS有着一定的规则:
当请求方法为GET、POST、HEAD,Header的Content-Type为application/x-www-form-urlencoded、multipart/form-data、text/plain时,无需先发起OPTIONS请求。
如果请求不在这些范围怎么办,那么就需要在OPTIONS的返回header中定于允许的内容
如:
Access-Control-Allow-Methods: PUT,DELETE用以允许PUT,DELETE请求。
Access-Control-Request-Headers: AUTH,Content-Type用以允许请求头中的自定义字段AUTH及任意的Content-Type
其它:
Access-Control-Max-Age: 3600本次请求验证信息的有效期(单位:秒),有效期内本次允许的请求类型将无需再触发OPTIONS请求,合理设置可以避免过多的请求压力。
Access-Control-Allow-Credentials: true允许带Cookie请求,设置此项时Access-Control-Allow-Origin需为确定的域名。

文中如有理解偏差,欢迎点评指正。
相关资料:
《HTTP访问控制(CORS)》https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
《跨域资源共享 CORS 详解 - 阮一峰》http://www.ruanyifeng.com/blog/2016/04/cors.html

相关文章

网友评论

      本文标题:CORS之跨域解决不只有域名

      本文链接:https://www.haomeiwen.com/subject/pxdppftx.html