浏览器的“域”问题

一、浏览器的“同源策略”

     1、同源三要素

          协议、域名、端口

          三者只要用一个不同,即不满足同源。

               (1)http\https的互相访问限制

                    在https(安全)的域名所在页面中访问http(不安全)的资源,会受限。

二、cookie的作用域

     1、协议、域名、path

          学过Java的同学都应该知道想往response里设置cookie之前会设置一些属性。这些属性包括domain(域)、security(协议)、path、version、age等等,这里可以和“同源策略”对应起来。

     2、cookie的作用域与“同源策略”

          接着第一点的说,cookie的作用域与“同源策略”三要素基本是对应关系。但是,但是,但是!我看有很多网站说不满足“同源策略”时,cookie是获取不到的。这里有一个例外,就是端口号。我在本地实验的结果告诉我,同协议、同域名、不同端口之间,既可以获取互相的cookie,也可以互相种cookie。为什么?学过Java的同学们,你们想想,什么时候见过设置cookie属性的时候,还要设置端口号的...

     3、经验之谈

          (1)不同域名之间是无法跨域种cookie的。eg:在页面上发起一个请求,这个请求域名是aaa.lenovo.com.cn,但是我在response里设置domain为bbb.lenovo.com的cookie,请求完成后,去bbb.lenovo.com.cn的页面上查看,并不会有我刚刚设置的cookie。

          (2)子父域问题

            lenovo.com.cn是aaa.lenovo.com.cn的父域。子域可以获取到父域的cookie,反之则不行。所以我们在种全站cookie的时候(比如登录状态),都会种到全站域名的父域上,这样全站可以共享登录状态。当然这里说的全站域名都是一个父域的情况。

          (3)跨域种cookie问题

             既然第一点已经说到,无法跨域种cookie,但是我们就是想给bbb.lenovo.com种cookie,这时候可以申请个reg.bbb.lenovo.com的域名,在response里设置cookie的domain为bbb.lenovo.com不就行了。当然,会有人说,为什么不设置domain为lenovo.com呢?这也是可以的。但是我们在设置cookie作用域时,出于安全角度考虑,尽量将cookie作用域设置的越小越好。

          (4)Safari

             还记得当年苹果公司拒绝配合FBI调查用户信息,这也就是说苹果对于个人信息的保密程度相当之高,但这也给我们跨域种cookie带来困扰。

             在高版本Safari浏览器下,会存在这样的问题:

             我在aaa.lenovo.com.cn的页面上发起一个bbb.lenovo.com的跨域请求,希望这个请求的response里能够设置domain为lenovo.com的cookie,这在其他浏览器上是被允许的,但是Safari会跟你说:NO!我认为,Safari的判断中,还会加上种cookie请求所在页面的域名。即,页面域名+请求域名+cookie的domain这三者必须同源...这近似苛刻的条件会使跨域种cookie变得异常困难。所以,在Safari中,利用跨域种cookie实现的功能只能换一种方案了。(可以参考taobao.com与tmall.com如何实现SSO,具体我也还在研究中)

             目前发现IOS12版本的机型中,refer与跳转页面的根域不同时,cookie无法带上的问题。

             当然除了Safari,在华为、小米的最新版型号手机自带浏览器中也出现了诸如此类的问题。安全无小事,这样的设定可能是为了最大限度保护用户的隐私,这样一想,也未必是一件坏事。

          (5)tomcat

            what?tomcat?跟它有啥关系?对的,你没看错。tomcat8.5版本之前,在设置cookie的domain属性时,你可以在域名前面加个点(eg:.lenovo.com.cn),表示这个cookie要种在父域上。但是tomcat8.5之后,你猫会给你返回一个大大的500报错。原因是你猫会认为你的domain是个非法参数,所以,你代码里之前有设置cookie,在domain前面加过点的,请谨慎升级tomcat到8.5....

三、跨域请求(Ajax)

     1、不满足“同源策略”的请求是不允许使用ajax调用的。

     2、跨域请求的方式,接触最多的方式的思想应该是将动态请求变成静态资源请求。

          jsonp\new img()\iframe等等,可以自行百度。

 

以上为自己的工作之中的思考与总结,如有错误,请斧正,多谢!

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值