ajax的同源策略

作者: Spring_Bear | 来源:发表于2018-03-07 21:57 被阅读101次

问题

之前帮忙做的广告机器人数据提交的部分,利用ajax的XMLHTTPRequest提交到服务器的时候总是报错,错误类型是不同源。想到浏览器中的同源策略,明白了问题的原因。

同源策略

简单的说,就是浏览器不允许两个不同源的域名之间交换信息,那么这里就有两个问题。一是,什么信息不允许交换;二是,怎样算不同源。

阮一峰的这篇博客浏览器同源政策及其规避方法其实已经介绍得比较清楚。引用一下,第一个问题:

目前,如果非同源,共有三种行为受到限制。
(1) Cookie、LocalStorage 和 IndexDB 无法读取。
(2) DOM 无法获得。
(3) AJAX 请求不能发送。

第二个问题:

所谓"同源"指的是"三个相同":
协议相同
域名相同
端口相同

同源策略的目的就是为了浏览器的安全,防止恶意脚本的肆意破坏。但是值得注意的是,<script>,<img>,<iframe>等,像类似这种带“src”属性的标签是可以跨域加载资源的,只不过限制了其读写返回的内容。

解决办法

可以看到的是,同源策略限制了ajax的不同源请求,那么有时候我们还是需要跨域的,如何解决这个问题呢?阮一峰老师在这篇文章中也给出了三种方法。

  1. 利用JSONP
  2. websocket
  3. CORS

第一种方法是利用了像<script>这样的标签可以加载跨域资源,客户端向服务端请求JSON数据,服务端通过将数据放在回调函数中传回来。

第二种方法本质原理是websocket请求头中本身就有origin信息,服务器可以通过这个源信息判断要不要给它传数据,所以websocket不受同源策略的影响。

第三种方法原理和第二种方法类似,就是在请求中多出一个origin头信息,然后服务端收到信息后,判断要不要给它传数据,并且在返回的信息中多加入几个头信息来传达接收或不接受的信息,从而浏览器做出反应。具体的可以参考阮一峰的文章跨域资源共享 CORS 详解

总结

我在实际的项目过程中,使用了第三种方法,在后台对php和apache进行了跨域的设置。具体可以参考# Ajax 跨域,这应该是最全的解决方案了

但是奇怪的是,客户端放到移动端之后,就好像没有跨域的问题了,同样的服务端,在电脑上显示跨域问题,在手机上操作就可以提交了,这是我没想明白的地方。

相关文章

  • day07-前端面试技巧-(通讯)

    什么是同源策略及限制 前后端如何通讯: Ajax:同源下的通讯方式 webSocket:不受限制同源策略 cors...

  • 跨域

    1,什么是同源? 2,什么是同源策略? 3,不受同源策略限制的 4,解决跨域的几种方式: 1,Ajax的jsonp...

  • 前端跨域解决方案

    跨域请求 全称:非同源策略请求(同源即同协议、同域名和同端口),而ajax专门用于处理同源策略请求,因此对于非同源...

  • 跨域问题

    跨域问题来自同源策略。 同源策略: 协议 域名 端口 带来影响:页面在进行通信的时候,dom ajax cooki...

  • ajax的同源策略

    问题 之前帮忙做的广告机器人数据提交的部分,利用ajax的XMLHTTPRequest提交到服务器的时候总是报错,...

  • jsonp的跨域原理

    跨域初步 因为ajax受到同源策略的限制,不能跨域读取数据。 但有些属性不受同源策略影响,比如script标签的s...

  • 前后端如何通信

    前后端通信的三种常用方式为: ajax, 受同源策略限制 websocket, 一种新的应用层协议, 不受同源策略...

  • 跨域请求

    同源策略是浏览器的一种安全策略,所谓同源是指域名,协议,端口完全相同,只有同源的地址才可以相互通过AJAX 的方式...

  • JSONP的技术原理是什么?

    JSONP的本质是利用了 "ajax请求会受到同源策略的限制, 而script标签请求不会" 这一点来绕过同源策略...

  • 跨域及解决跨域

    同源策略:ajax请求时,浏览器要求当前网页和server必须同源(安全) 同源的意思是:协议,域名,端口 三者必...

网友评论

    本文标题:ajax的同源策略

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