我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何解决浏览器跨域问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何解决浏览器跨域问题

这篇文章主要介绍如何解决浏览器跨域问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1、什么是跨域问题

在页面中使用js访问其他网站的数据时,就会出现跨域问题,比如在网站中使用ajax请求其他网站的天气、快递或者其他数据接口时,以及hybrid app中请求数据,浏览器会提 示一下错误:

XMLHttpRequest cannot load http://你请求的域名. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://当前页的域名' is therefore not allowed access.

2、为什么会出现跨域问题

因为浏览器收到同源策略的限制,当前域名的js只能读取同域下的窗口属性。

同源策略: 不同的域名, 不同端口, 不同的协议不允许共享资源的, 保障浏览器安全。

同源策略时针对浏览器设置的门槛。如果绕过浏览就能实现跨域,所以说早期的跨域都是打着安全路数的擦边球,都可以认为是 hack 处理。

3、现在总结一下解决跨域的几种方法

jsonp 跨域方法

我们提供一个 script 标签. 请求页面中的数据, 同时传入一个回调函数的名字. 服务器端得到名字后, 拼接函数执行格式的字符串. 发送回浏览器. script 在下载代码以后并执行, 执行的就是这个函数调用形式的字符串, 因此就将本地函数调用了.同时拿到了从服务器端得到的数据。

window.name

window对象的name属性是一个很特别的属性,当该window的location变化,然后重新加载,它的name属性可以依然保持不变。那么我们可以在页面A中用iframe加载其他域的页面B,而页面B中用JavaScript把需要传递的数据赋值给 window.name,iframe加载完成之后,页面A修改iframe的地址,将其变成同域的一个地址,然后就可以读出window.name的值了。这个方式非常适合单向的数据请求,而且协议简单、安全。不会像JSONP那样不做限制地执行外部脚本。

document.domain

通过修改document的domain属性,我们可以在域和子域或者不同的子域之间通信。同域策略认为域和子域隶属于不同的域,比如 www.a.com和sub.a.com是不同的域,这时,我们无法在www.a.com下的页面中调用sub.a.com中定义的JavaScript 方法。但是当我们把它们document的domain属性都修改为a.com,浏览器就会认为它们处于同一个域下,那么我们就可以互相调用对方的 method来通信了。

window.postMessage

window.postMessage是HTML5定义的一个很新的方法,这个方法可以很方便地跨window通信。由于它是一个很新的方法,所以在很旧和比较旧的浏览器中都无法使用。

借助于服务器代码来跨域(正向代理、反向代理)

正向代理: 我借助与我的服务器, 像数据服务器发送数据, 我的服务器只需要向数据服务器发送get请求即可

反向代理: 与正向代理类似, 但是不借助于脚本, 而是直接使用 服务器映射 url.

例如: 我们的 url 是 http://studyit.com

数据服务器的 url 是 http://api.botue.com/login

在 apache 配置一个 url 的代理映射

理论上使用 url: http://studyit.com/api 是在网站根目录下找 api 文件夹

但是现在 apache 提供一个映射的功能, 将 /api 映射到 http://api.botue.com

有了这个映射, 那么 访问 http://api.botue.com/login 就可以利用 /api/login来访问了.

反向代理的好处:

不仅实现了跨域( 服务器帮我们实现的 ), 而且访问数据的时候就好像在访问本地服务器一样.如此, 诸如 cookie 等数据就可以直接获得了.


怎么使用 反向代理( 不同的服务器的使用方法不一样 )

1) 找到 httpd.conf 配置文件, 找到里面的 porxy 开头的两个模块加载项. 去掉其注释.

  LoadModule proxy_module modules/mod_proxy.so
  LoadModule proxy_http_module modules/mod_proxy_http.so

2) 找到虚拟主机的配置文件. 需要谁来做反向代理 就修改谁的配置文件,在虚拟主机的设置中( 就是那一对尖括号中 )添加两个选项

  ProxyRequests Off
  ProxyPass /abc http://test2.com

3) 重启服务器

CORS 跨域

CORS 是在 es5 之后提出的跨域方案. 只需要在服务器配置一个跨域响应头接口

与jsonp相比的优点:

1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。

2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。

3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS。

代码如下:

客户端:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <button id="btn">请求</button>
  <script class="lazy" data-src="./jquery-3.2.0.js"></script>
  <script>
  
    $( '#btn' ).click(function () {

      $.ajax( {
        url: 'http://test2.com/03-index.php',
        success: function ( info ) {
          console.log( info );
        }

      });

    });
  </script>
</body>
</html>

服务器端:

<?php

// header( 'Access-Control-Allow-Origin: *' ); // 允许任意的网站跨域

header( 'Access-Control-Allow-Origin: http://test1.com' );//允许指定网站

echo 'cors 跨域';
?>

以上是“如何解决浏览器跨域问题”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何解决浏览器跨域问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何解决跨浏览器的问题

这篇文章主要为大家展示了“如何解决跨浏览器的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决跨浏览器的问题”这篇文章吧。1. 前缀 CSS3 样式如果您正在使用任何类型的现代 CSS
2023-06-08

跨域浏览器怎么设置解决前端跨域问题

这篇文章主要介绍“跨域浏览器怎么设置解决前端跨域问题”,在日常操作中,相信很多人在跨域浏览器怎么设置解决前端跨域问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”跨域浏览器怎么设置解决前端跨域问题”的疑惑有所
2023-07-02

web前端:浏览器跨域问题分析

编程学习网:CSRF(Cross-siterequestforgery)跨站请求伪造,也被称为OneClickAttack或者SessionRiding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
web前端:浏览器跨域问题分析
2024-04-23

PHP跨域问题如何解决

这篇文章主要讲解了“PHP跨域问题如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP跨域问题如何解决”吧!设置允许访问的域名:1、允许全部的域名访问header("Access-C
2023-07-05

VUE如何解决跨域问题

这篇文章主要介绍“VUE如何解决跨域问题”,在日常操作中,相信很多人在VUE如何解决跨域问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VUE如何解决跨域问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-07-02

iframe如何解决跨域问题

iframe如何解决跨域问题,需要具体代码示例跨域问题是前端开发中常遇到的一个难题。由于浏览器的同源策略,页面中的JavaScript无法直接访问不同域名下的资源。解决这个问题有很多方法,其中之一便是使用iframe。什么是同源策略和跨域
iframe如何解决跨域问题
2024-02-22

Vue3跨域问题如何解决

这篇文章主要介绍了Vue3跨域问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3跨域问题如何解决文章都会有所收获,下面我们一起来看看吧。vue项目配置代理vue.config.jsconst {
2023-07-05

jquery如何解决跨域问题

jQuery提供多种方法解决跨域问题,包括JSONP、CORS、代理和预检请求。选择合适的方法取决于具体需求。本文详细介绍了每种方法,包括JSONP的JSON数据包装、CORS的服务器端配置、代理的中间人角色、预检请求的复杂请求检查,以及iframe的HTML结构嵌入。此外,本文还提到了其他方法,如postMessage()、WebSocket和FetchAPI。
jquery如何解决跨域问题
2024-04-02

Ajax跨域问题如何解决

这期内容当中小编将会给大家带来有关Ajax跨域问题如何解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。跨域跨域有三个条件,满足任何一个条件就是跨域 1:服务器端口不一致 2:协议不一致 3:域名不一致解
2023-06-08

django跨域问题如何解决

Django跨域问题可以通过以下几种方法来解决:1. 使用Django的CORS插件:可以通过安装django-cors-headers插件来实现跨域访问的支持。安装插件后,在settings.py文件中添加以下配置:```pythonIN
2023-09-26

VueSPA如何解决浏览器缓存问题

这篇文章主要介绍了VueSPA如何解决浏览器缓存问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

node.js中如何解决跨域问题

这篇文章主要讲解了“node.js中如何解决跨域问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“node.js中如何解决跨域问题”吧!如果用Express框架的话可以使用cors包来解决跨
2023-06-17

如何解决thinkphp withCredentials跨域问题

小编给大家分享一下如何解决thinkphp withCredentials跨域问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
2023-06-08

编程热搜

目录