跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。

同源策略:所谓同源是指:协议,域名,端口均相同。即便两个不同的域名指向同一个ip地址,也非同源。

http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)
http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)
http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)
http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)
http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)
请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。

三.为什么会存在浏览器跨域限制?

既然目前各主流浏览器都存在跨域限制,那么为什么一定要存在这个限制呢?如果没有跨域限制会出现什么问题?
浏览器同源策略的提出本来就是为了避免数据安全的问题,即:限制来自不同源的“document”或脚本,对当前“document”读取或设置某些属性。
如果没有这个限制,将会出现什么问题?不妨看一下几个情形:

可能a.com的一段JavaScript脚本,在b.com未曾加载此脚本时,也可以随意涂改b.com的页面。
在浏览器中同时打开某电商网站(域名为b.com),同时在打开另一个网站(a.com),那么在a.com域名下的脚本可以读取b.com下的Cookie,如果Cookie中包含隐私数据,后果不堪设想。
因为可以随意读取任意域名下的Cookie数据,很容易发起CSRF攻击。
所以,同源策略是浏览器安全的基础,同源策略一旦出现漏洞被绕过,也将带来非常严重的后果,很多基于同源策略制定的安全方案都将失去效果。

四.对于浏览器来说,哪些资源(操作)会受到同源策略的限制?

对于浏览器来说,除了DOM,Cookie,XMLHttpRequest会受到同源策略的限制外,浏览器加载的一些第三方插件也有各自的同源策略。
最常见的一些插件如Flash,Java Applet,Silverlight,Google Gears等都有自己的控制策略。
另外,存储在浏览器中的数据,如LocalStorage和IndexedDB,以源进行分割。每个源都拥有自己单独的存储空间,一个源中的Javascript脚本不能对属于其它源的数据进行读写操作。

五.浏览器跨域限制会带来什么问题?

随着互联网的发展,对用户体验的要求越来越高,AJAX应用也就越发频繁,AJAX的本质就是XMLHttpRequest。
但XMLHttpRequest受到同源策略的约束,所以不能跨域访问资源,这与我们的期望是相违背的。

解决办法:

1、JSONP:

使用方式就不赘述了,但是要注意JSONP只支持GET请求,不支持POST请求。

2、代理:

例如www.123.com/index.html需要调用www.456.com/server.php,可以写一个接口www.123.com/server.php,由这个接口在后端去调用www.456.com/server.php并拿到返回值,然后再返回给index.html,这就是一个代理的模式。相当于绕过了浏览器端,自然就不存在跨域问题。

3、PHP端修改header(XHR2方式)

在php接口脚本中加入以下两句即可:

header('Access-Control-Allow-Origin:*');//允许所有来源访问

header('Access-Control-Allow-Method:POST,GET');//允许访问的方式

什么是跨域?什么情况下会发生跨域请求?相关推荐

  1. Goroutine调度时机-什么时候和什么情况下会发生调度?

    原文地址:Goroutine调度时机-什么时候和什么情况下会发生调度? Go调度器会在以下三种情况对goroutine进行调度: goroutine执行某个操作因条件不满足需要等待而发生的调度. go ...

  2. 什么情况下会发生full Gc?如何排查频繁发生full Gc的原因?

    GC就是Java的垃圾回收机制,要了解什么情况下会发生GC(即GC得触发条件),我们需要先了解JVM的内存模型结构,之前一篇文章已经详细讲解了Jvm的内存模型结构,而通常来说,GC主要针对的是堆(ja ...

  3. 如何设置iframe高度自适应,在跨域的情况下能做到吗?

    2019独角兽企业重金招聘Python工程师标准>>> 在页面上使用iframe来动态加载页面内容是网页开发中比较常见的方法.在父页面中给定一个不带滚动条的iframe,然后对属性s ...

  4. 什么情况下会发生Full GC?

    1.调用System.gc()时 当调用System.gc()时,是建议JVM进行Full GC,只是建议,不是一定会发生,但一般情况下,JVM也会进行Full GC,进行Full GC时会让用户线程 ...

  5. 038、JVM实战总结:200小时积累,6小时烹制,史上最强图,图解:大厂面试题,Young GC和Full GC分别在什么情况下会发生?

    今天学习本讲,按照艾宾浩斯遗忘曲线应该复习:37 35 31 24 9.建议大家按照遗忘曲线来复习学过的内容. 这是本人花了6个小时,精心绘制的"垃圾回收"活动图,同时进行了文字总 ...

  6. 史上最强图,图解:大厂面试题,Young GC和Full GC分别在什么情况下会发生?

    在原文基础上重新绘制了一下进行Young GC .Full GC 的条件及处理过程(原文链接 https://blog.csdn.net/dingshuo168/article/details/987 ...

  7. 并发insert情况下会发生重复的数据插入问题

    1.背景 用多线程接收推送的订单数据,把接收的订单数据存到一个表中,实现的需求是:如果接收的订单消息在数据库中已经存在,那么执行update操作:如果没有存在,那么执行insert操作 代码逻辑: i ...

  8. c语言浮点乘法 溢出,浮点加减乘除运算各在什么情况下会发生溢出?

    满意答案 w9o7w429 2014.01.10 采纳率:52%    等级:12 已帮助:2903人 溢出的原因只有一个 那就是这句 c=a/b 其中b的值为0 也就是 b=cint(request ...

  9. requests在电脑开启代理的情况下无法正常发送请求

    requests.exceptions.SSLError: HTTPSConnectionPool(host='www.pinterest.com', port=443): Max retries e ...

最新文章

  1. linux python版本_linux下更新Python版本并修改默认版本
  2. 前后端API交互如何保证数据安全性?
  3. Python的IDE:利用MyEclipse2017软件的PyDev插件实现Python编程
  4. Jacoco的原理(各个覆盖率的解释)
  5. SAP UI5 应用开发教程之五:视图控制器初探
  6. 商海致富独家秘诀:微笑可以当钱花
  7. 2018年三月份计算机一级考试试题,2018年3月计算机一级考试MSOFFICE模拟试题(4)
  8. 【英语学习】【English L06】U07 Jobs L5 Work overtime
  9. AutoPtr 的局限性
  10. Android 中文 API (24) —— MultiAutoCompleteTextView.CommaTokenizer
  11. html三个div相同高度,Html三个div并排,高度相同
  12. 如何在 EXCEL 2003 插入的方框内打对勾,复选框
  13. phpcms 允许英文目录有空格
  14. Chrome浏览器首次打开后未响应较长时间
  15. 第 7 章 Database design E-R diagram
  16. 【100 种语言速成】第 6 节:Tcl/Tk
  17. java门禁系统实训,Java 并发课题 : CyclicBarrier 打造一个安全的门禁系统
  18. 【浑水摸鱼】化学方程式默写练习器
  19. 关于tomcat启动后马上又自动关闭的问题
  20. Smartbi带你了解“更智能”的透视分析

热门文章

  1. 安卓(vivo)手机上使用Termux,在手机部署linux环境,实现python的应用
  2. 使用邻接列表简单实现PageRank算法(C++)
  3. PS把图标背景变为透明背景
  4. 广工计算机组成原理实验,广工计算机组成原理实验(一二三四五六七九)
  5. python反爬虫机制_盘点一些网站的反爬虫机制
  6. 项目日志记录规范和标准
  7. K13288 最小回文
  8. Anaconda Jupyter notebook 如何进入D盘
  9. 查有梁:天上有颗行星 名叫落下闳星
  10. Python实现将列表按比例和数量拆分成子列表