同源策略阻止的是请求的发送还是数据的接收?
2016-11-08 18:52
274 查看
同源策略
(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,Web是构建在同源策略基础之上的,浏览器是针对同源策略的一种实现。
之前一直认为,它是通过对发出的请求进行检查是否同源,然后决定是否对该请求加以限制来实现。这次经过验证发现正好相反:
在www.test.com下的页面中向www.domian.com下的a.php发送ajax请求:
控制台信息显示跨域不被允许:
查看服务器access.log记录,找到了这条请求的记录:
所以同源策略应该是浏览器在接收加载资源之前对其来源进行了检查,然后限制加载。
关于解决办法,有很多,最简直接的办法就是在相应头里添加Access-Control-Allow-Origin:当前域名:
这样就能成功得到返回结果666:
也可以给Access-Control-Allow-Origin: 通配符 *,实际中基本不会用。
(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,Web是构建在同源策略基础之上的,浏览器是针对同源策略的一种实现。
之前一直认为,它是通过对发出的请求进行检查是否同源,然后决定是否对该请求加以限制来实现。这次经过验证发现正好相反:
在www.test.com下的页面中向www.domian.com下的a.php发送ajax请求:
$.ajax({ type:"get", url:"http://www.domain.com/a.php", async:true, success:function(res){ console.log(res) }, error:function(){ console.log("error") } });
控制台信息显示跨域不被允许:
XMLHttpRequest cannot load http://www.domain.com/a.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.test.com' is therefore not allowed access.
查看服务器access.log记录,找到了这条请求的记录:
所以同源策略应该是浏览器在接收加载资源之前对其来源进行了检查,然后限制加载。
关于解决办法,有很多,最简直接的办法就是在相应头里添加Access-Control-Allow-Origin:当前域名:
<?php header('Access-Control-Allow-Origin: http://www.test.com'); echo "666"; ?>
这样就能成功得到返回结果666:
也可以给Access-Control-Allow-Origin: 通配符 *,实际中基本不会用。
相关文章推荐
- 同源策略阻止的是请求的发送还是数据的接收
- [Socket网络编程]由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
- 双卡发送和接收彩信的解决方法 mms 主要还是看数据连接的建立
- Android向node.js编写的服务器发送数据并接收请求
- axios发送post请求,springMVC接收不到数据问题
- weiphp2.0 controller.class.php里面add方法接收不到post请求发送的数据
- 已阻止交叉源请求:同源策略不允许读取
- VPOS MAS-CNP接口——建立https连接发送请求并接收返回的XML数据流
- vue 集成 axios 发送post请求 payload导致后台无法接收到数据问题
- C#请求http向网页发送接收数据的方法
- axios发送post请求,springMVC接收不到数据问题
- 初涉Ajax,以post或get方法发送数据,以json或xml形式接收服务器返回的请求
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- 关于java 发送http json数据格式请求时,服务器端如何接收json数据并解析
- Socket发送请求“超时”——接收数据方式引起的bug
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- Python中使用socket发送HTTP请求数据接收不完整问题解决方法
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- httpclient发送get请求并接收相应数据
- AngularJs的$http发送POST请求,php无法接收Post的数据解决方案