注意啦!Chrome68以后可能你的API无法使用

903 阅读2分钟

先来了解一个新名次CROB,全称Cross-Origin Read Blocking,是一种遏制执行恶意代码保护用户数据隐私的安全策略。不同于CROS,这个策略的执行端是在浏览器这边,自Chrome 68以后的版本都是默认开启这个策略的。

那么这个CROB会给我们的开发带来什么影响呢?

首先就是无论你是否已经在服务器端配置了CROS策略,但是只要你请求的数据是

  • html mime type
  • xml mime type(除了 image/svg+xml)
  • json mime type
  • text/plain

这四种文档类型,那么都不能实现跨域访问,虽然数据的确已经传输到了你的浏览器,但是你会发现你死活救赎无法读取这些数据,没错,浏览器把这些数据在底层给你封闭锁死了,这样一来要实现跨域攻击的难度就又提高了。

对于普通用户来说提高了安全性是一件好事,但是对于开发者来说又是一道坎,但是没办法这道坎还是要过。

那么什么时候我们会遇到这道坎呢?如果你是同一个域名下的话,不会有影响,有影响的是调用第三方API时候才会发生,因为不是同源,而且就算对方的服务器开启了同源策略,在浏览器端依旧会受制于CROB策略,这可怎么办?

解决这个办法有点小困难,因为需要在服务器端也要做调整,如果没有这个权限的话就只能使用后台代理技术来实现了。那么来介绍下怎么实现把。

解决方法

服务器端

服务器端需要对返回数据类型是text/jsonapplication/json的数据做一下更改,将MIME类型改成其他任意值都可以,比如说text/json8这样。

然后需要将返回数据处理一下,在最前面插入非{的字符,像facebook是使用for(;;;){}这样的形式最为前导字符,然后和要返回的JSON字符串合并起来发送给客户端。

客户端

客户端只要检查MIME类型,符合指定类型的时候就把前导字符串去除,然后序列化JSON数据就可以了