跨域

2017-08-24  本文已影响0人  喵不吱

默认情况下,XMLHttpRequest 或 Fetch 发起的跨域请求,浏览器会限制。

在jquery.com网站请求数据

什么是跨域请求?

如何跨域?

跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。(打破同源策略)一般通过该方式实现调用第三方数据平台滴API
(1) 请求方法是以下三种方法之一:
   HEAD
   GET
   POST
(2)HTTP的头信息不超出以下几种字段:
    Accept
    Accept-Language
    Content-Language
    Last-Event-ID
    Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

但是,origin 是可以伪造的。


可怕,前端一点都不安全

复制之后,通过命令行等工具可以个更改origin

预检请求 即:非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求
JSONP (只能获取(get)数据,考虑到旧式浏览器采用奥,其实现的原理感受到了前端的苦逼而无所不用其极)
function jsonpCallback(data) {
  console.log(data)
}
let script = document.createElement('script')
script.src = `https://octocats.now.sh/jsonp/octocats?callback=jsonpCallback&_=${Date.now()}` //加时间戳不会被缓存到
document.body.appendChild(script)  // 加到文档之后浏览器才会请求脚本
涉及到另外一个知识点:不符合CSP 的外部资源就会被阻止加载
$.ajax({
 url: 'https://octocats.now.sh/jsonp/octocats',
 dataType: 'jsonp',
 success: function(cats) {
   console.log(cats) //json数据   {data: Array(10), pagination: {…}}
 }
})
生成的字串
响应回来的原始信息
CORS和JSONP对比
postMessage() 全局函数 HTML5的方法(守得云开见日出啊)可以结合localstorage做两个不同域之间的通讯
服务器代理跨域(后端的事)
关于跨域攻击 [http://www.ruanyifeng.com/blog/2016/09/csp.html](Content Security Policy 入门教程)
通过页面的src 发出的请求是跨域吗?是跨域,但是不受同源策略的限制
上一篇 下一篇

猜你喜欢

热点阅读