美文网首页
web开发基础 - 同源策略

web开发基础 - 同源策略

作者: 澜昕 | 来源:发表于2018-09-24 11:16 被阅读0次

    前段时间解决公司web站搭建问题时,发现自己对于web开发的一些简单的概念都不太了解,虽然现在移动开发比较热门,但还是需要补习下web开发的基础知识,这篇文章就是对于同源策略的一个学习体会。

    同源策略是浏览器的一个安全功能,即不同源的客户端脚本不允许读写对方的资源。这里的资源常见的有cookie、DOM,Ajax请求也只能发送给同源的网址。那什么是同源?简单的来说源包括三个要素:协议、域名和端口号,如果三个要素都完全相同,则被称为同源。这里顺便说一下域名,一般情况域名中含有几个“.”就是几级域名,com、cn、net、org又可以称为顶级域名。一级域名,比如baidu.com就是一个一级域名,一般需要购买,再搭建一个DNS服务器并注册到互联网后,就可以在后面再增加二级、三级域名了。例如:www.baidu.com是一个二级域名,baidu.com是一级域名,www是该域名下主机名。

    但是也有一些特殊情况不会去限制同源,例如<script>、<img>、<iframe>标签一级表单POST提交,下文的某些解决方案就是利用了这一点,这里暂不展开。既然同源是一种安全限制,上述的特殊情况也会被攻击利用,比如XSS全站脚本攻击就是利用了这个漏洞。

    非同源的访问被成为跨域访问,有三种方式可以规避这个限制,下面会一一详述:

    一、Nginx反向代理

    架设一个nginx同源服务器,浏览器都去请求该nginx服务器,nginx根据不同的目录去请求真正的服务器地址。优点是可以不用目标服务器配合,需要搭建一个中转的nginx服务器,本质上就是一个代理服务器用于转发请求。

    二、JSONP

    这种方式利用了浏览器对于<script>标签中的src不进行同源策略的限制来实现,实现原理是:网页通过添加一个<script>元素,向服务器请求json数据,服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。JSONP的优点是可以支持老版本的浏览器,缺点是只能支持GET请求,并且需要服务端在返回结果中增加回调函数。

    三、CORS

    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing),但并不是所有的浏览器版本都支持CORS的。该方案需要在客户端和服务器都增加支持,它的处理方法如下:当向跨域服务器发送XMLHttpRequest请求时,浏览器发现请求不符合同源策略,会给该请求加一个请求头“origin”,服务器如果确定接收该请求,则会在在返回结果中增加一个响应头“Access-Control-Allow-Origin”,值可以是“*”,也可以是请求头“origin”的值。默认情况下CORS请求不发送Cookie和HTTP认证信息,如果需要把Cookie发送到服务器,则要指定请求头“Access-Control-Allow-Credentials”的值为true,不过这时响应头“Access-Control-Allow-Origin”的值不可以为“*”。另外,如果还需要发送自定义头信息,需要设置请求头“Access-Control-Allow-Headers”,它的值为一个逗号分隔的字符串,包括所有的自定义头名称。

    相关文章

      网友评论

          本文标题:web开发基础 - 同源策略

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