聊聊“浏览器跨域访问”

浏览器的同源策略

同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能会受到影响。

浏览器的指的是,协议://域名:端口这样的URL组合。

示例 结果
http://example.comhttps://example.com 协议不同,不同源
http://www.example.cnhttp://example.cn 域名不同,不同源
http://www.example.cnhttp://www.example.cn:8080 端口不同,不同源
http://www.example.cnhttp://www.example.cn/test 同源

可见影响“源”的因素有:协议、域名或IP地址(如果是IP地址则看做一个根域名)、子域名、端口。

在实际开发当中,可能会涉及到不同的跨域访问方式。像现在WEB开发前后端分离的开发方式,就会涉及到这方面的应用。根据不同的应用场景,可将跨域访问方式进行简单分成,跨域脚本API访问、跨域存储数据访问。

跨域访问解决方法

根据不同的服务场景,选择不同的跨域访问方式解决数据的跨域访问。

  • 场景一,项目需要在页面脚本,通过异步请求的方式访问其他域名下的资源。
    这种模式下,最常用的,就是通过jsonp,利用JavaScript加载没有同域策略的机制。在这种方式功能有所限制,只支持Get请求。
    与这种方式类似,就是利用iframe间通信方式,具体就不展开。
  • 场景二,针对目前常见前后端分离开发方式,前端在登录时,若需要在Cookie中保存sessionId信息,则Cookies需要进行跨域访问。此时,后端服务需要告诉前端请求的浏览器,指定Access-Control-Allow-Credentials字段,允许此次跨域的访问请求,并允许将后端生成的Cookies在前端浏览器保存。同时,浏览器在请求的时候,在Ajax请求头上,也要带上此字段信息。
    var xhr = new XMLHttpRequest();
    xhr.withCredentials = true;
    这就是常见的跨域资源共享(CORS)

服务器常用请求头及说明

请求头 解释
Access-Control-Request-Method 先导请求中的请求头,告诉服务器真实请求的http方法
Access-Control-Request-Headers 先导请求中的请求头,告诉服务器真实请求的http请求头相应头
Access-Control-Allow-Origin 该字段必须,表示服务器允许跨域请求的origin,设置为*表示接受任意域名请求
Access-Control-Expose-Headers 该字段可选,CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。如getResponseHeader('FooBar')可以返回FooBar字段的值。
Access-Control-Allow-Credentials 该字段可选,表示是否允许发送cookie。默认不允许,
Access-Control-Allow-Methods 允许的请求方法
Access-Control-Allow-Headers 允许的请求头部
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    他方l阅读 4,729评论 0 2
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    Yaoxue9阅读 5,154评论 0 6
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    HeroXin阅读 4,375评论 0 4
  • 欢迎关注微信公众号:全栈工厂 本文主要参考跨域资源共享 CORS 详解[http://www.ruanyifeng...
    liqingbiubiu阅读 5,987评论 0 3
  • 题目1.什么是同源策略? 同源策略(Same origin Policy): 浏览器出于安全方面的考虑,只允许与本...
    FLYSASA阅读 5,731评论 0 6

友情链接更多精彩内容