CORS之跨域解决不只有域名

前后端分离开发基本都会有跨域问题,一般服务端加个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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    HeroXin阅读 866评论 0 4
  • 题目1.什么是同源策略? 同源策略(Same origin Policy): 浏览器出于安全方面的考虑,只允许与本...
    FLYSASA阅读 1,774评论 0 6
  • CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 ...
    奇特思维家阅读 1,141评论 0 3
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    Yaoxue9阅读 1,342评论 0 6
  • 衣服上染上颜色了怎么也洗不掉,处理下,还能穿。 丙烯颜料, 画了两朵荷花,这条裙子就出来另一种感觉了。
    zero最好的开始阅读 628评论 3 7