什么是跨域?什么情况下会发生跨域请求?

什么是跨域?什么情况下会发生跨域请求?跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。同源策略:所谓同源是指:协议,域名,端口均相同。即便两个不同的域名指向同一个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:/

大家好,又见面了,我是你们的朋友全栈君。

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

同源策略:所谓同源是指:协议,域名,端口均相同。即便两个不同的域名指向同一个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');//允许访问的方式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139656.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 笔记本电脑用久了卡顿解决方法视频_win7严重卡顿

    笔记本电脑用久了卡顿解决方法视频_win7严重卡顿第一步:点击我的电脑或者此电脑选中C盘(最好是每哥盘都做下面的操作)右键点击然后选中属性如图所示:点击磁盘清理然后继续选择其中需要清理的,其实都可以清理。第二步:然后点击选择工具,选择优化如图所示第三步:选择其中的一个盘如有分析就先点击分析,然后点击优化如图所示:第四步:桌面的东西能清理就都清理掉,桌面最好就只保留一两个东西。第五步:删除C盘下面中Web里面的所有东西,是删除Web里面的所有东西,不是Web文件夹,还有删除Temp文件夹下面的所有东西,不要删除Temp

  • html怎么让表格居中显示_html表格文字居中怎么设置

    html怎么让表格居中显示_html表格文字居中怎么设置HTML怎么使表格居中显示文本居中表格居中查看结果

  • angularjs下载地址

    angularjs下载地址

  • java检测网站死链,网站死链检测工具

    java检测网站死链,网站死链检测工具一个网站死链过量,对付访客来讲,无奈关上的链接是对付友好的用户体验的一大袭击。而对付搜索引擎来讲,站点假如存在过量的死链接,那末搜索引擎的蜘蛛就会逐步的不再来匍匐你的站点。其成果便是网站的快照不更新,收录量骤减,排名降低及访客的大批散失。本日保举一款不停以来深受业界好评,并被普遍使用的死链接检测对象。【Xenu】咱们保举的死链接检测对象Xenu重要具备如下特性:必要下载装置,不到1M巨细,用户界面…

  • executeUpdate()返回值「建议收藏」

    executeUpdate()返回值「建议收藏」executeUpdate()是PreparedStatement对象众多的抽象方法中的一个在jdk1.8中executeUpdate()有两种返回值(搜索一下PreparedStatement即可查看到),即有两种返回值不同的方法。返回值分别是:int和ResultSet在使用数据库的项目中作者用到了返回值为int的方法,查询了一下相关的解释intexecuteUpdate()…

    2022年10月20日
  • python爬取股票代码_python爬取所有股票的个股资讯「建议收藏」

    python爬取股票代码_python爬取所有股票的个股资讯「建议收藏」前言由于毕设是要对股票的新闻报道进行情感分析,所以爬取所有股票的个股资是必要的前提工作了。一开始准备直接在东方财富网上爬取所有的个股资讯,但是在获得个股资讯列表的时候要模拟事件。前提工作安装python3(下载地址),在安装的时候选择添加到环境变量,如果没有选择,可以通过【右键我的电脑】->【属性】->【高级系统设置】->【环境变量】->【path】将安装的Python3的…

    2022年10月30日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号