Access-Control-Allow-Origin与跨域
2016-01-09 12:45
204 查看
问题
在某域名下使用Ajax向另一个域名下的页面请求数据,会遇到跨域问题。另一个域名必须在response中添加 Access-Control-Allow-Origin的header,才能让前者成功拿到数据。
这句话对吗?如果对,那么流程是什么样的?
跨域
怎样才能算跨域?协议,域名,端口都必须相同,才算在同一个域。参考:
Are
different ports on the same server considered cross-domain? (Ajax-wise)
同事李栋的博客:跨源资源共享
当跨域访问时,浏览器会发请求吗
这是真正困扰我们的问题,因为我们不清楚浏览器会怎么做。它会不会检查到你要请求的地址不是同一个域的,直接就禁止了呢?我在jsbin上 做了一个试验 ,使用Chrome打开。当点击“Run
with Js”时,控制台上会打出:
XMLHttpRequest cannot load http://google.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://run.jsbin.io' is therefore not allowed access.
但开发者工具的”Network”栏并没有任何记录。它到底发请求了没?
我又使用
python -m SimpleHTTPServer在本地创建了一个小服务器,然后把地址改成它,结果发现在python这边的确打印出请求来了,可见浏览器的确发出了请求。
Access-Control-Allow-Origin
现在该 Access-Control-Allow-Origin出场了。只有当目标页面的response中,包含了
Access-Control-Allow-Origin这个header,并且它的值里有我们自己的域名时,浏览器才允许我们拿到它页面的数据进行下一步处理。如:
Access-Control-Allow-Origin: http://run.jsbin.io
如果它的值设为
*,则表示谁都可以用:
Access-Control-Allow-Origin: *
没错,在产品环境中,没人会用
*
你可以阅读下面这篇文章了解更多,并可找到其中的”Run Sample”链接,实际体验一下:
http://www.html5rocks.com/en/tutorials/cors/
相关文章推荐
- 【ztree系列】节点的增删改
- 大华乐橙云JavaWEB版实现网页直播远程监控DEMO
- 终端设备、Web前端错误的上报系统及方法
- C++小题(十三)
- 146_尺取法 subsequence (POJ No 3061)
- 进程与线程的一个简单解释
- PAT程序设计考题——甲级1007 (最大连续子序列和)
- Java中的String为什么是不可变的? -- String源码分析
- 类类型
- IO的阻塞与非阻塞、同步与异步以及Java网络IO交互方式
- LeetCode Valid Number
- mailx定时任务不能执行
- PHP中mysql_affected_rows()和mysql_num_rows()区别
- Win10专业版怎么解决电脑关机后又自动开机的问题?
- PAT程序设计考题——甲级1006 签到问题(求所有签到人的最早时间和最晚时间)
- Log4j2介绍和特性实例(四)--过滤器Filter
- 登录界面注册存储过程
- 【机器学习实战】笔记三:朴素贝叶斯算法
- java打造手机远程控制电脑之详细教程
- sqlserver与java数据类型对应