位置: IT常识 - 正文

浏览器:跨域及解决方法(前端解决浏览器跨域问题)

编辑:rootadmin
浏览器:跨域及解决方法

推荐整理分享浏览器:跨域及解决方法(前端解决浏览器跨域问题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:浏览器插件跨域,浏览器跨域和兼容的解决方式,浏览器跨域cookie,前端解决浏览器跨域问题,浏览器跨域解决方案,浏览器跨域是什么意思,浏览器跨域和兼容的解决方式,浏览器跨域是什么意思,内容如对您有帮助,希望把文章链接给更多的朋友!

一、为什么会出现跨域问题:

 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能不能使用。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不一同,即跨域:

当前页面url被请求页面url是否跨域原因http://www.a.comhttp:www.a.con/index.html没有跨域同源(协议、域名、端口相同)http://www.a.comhttps://www.a.com跨域协议不同http://www.a.comhttp:www.b.com跨域主域名不同http://www.a.comhttp://org.a.com跨域子域名不同http://www.a.com:8080http://www.a.com:8081跨域端口号不同

二、同源策略的限制:

1、无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB

2、无法接触非同源网页的 DOM

3、无法向非同源地址发送 AJAX 请求

三、跨域解决方法

3.1、设置document.domain

因为浏览器是通过document.domain属性来检查两个页面是否同源,因此只要通过设置相同的document.domain,两个页面就可以共享Cookie。(此方案仅限主域相同,子域不同的跨域应用场景。)

https://www.jb51.net/web/578404.html

需要两个页面都加上

3.2、window.postMessage()

页面和其打开的新窗口的数据传递、多窗口之间消息传递、页面与嵌套的iframe消息传递,上面三个场景的跨域数据传递

// 父窗口打开一个子窗口var openWindow = window.open('http://test2.com', 'title');// 父窗口向子窗口发消息(第一个参数代表发送的内容,第二个参数代表接收消息窗口的url)openWindow.postMessage('Nice to meet you!', 'http://test2.com');调用message事件,监听对方发送的消息// 监听 message 消息window.addEventListener('message', function (e) {  console.log(e.source); // e.source 发送消息的窗口  console.log(e.origin); // e.origin 消息发向的网址  console.log(e.data);   // e.data   发送的消息},false);

3.3、JSONP(json with padding)

JSONP 是服务器与客户端跨源通信的常用方法。最大特点就是简单适用,兼容性好(兼容低版本IE),缺点是只支持get请求,不支持post请求。

核心思想:网页通过添加一个<script>元素,向服务器请求 JSON 数据,服务器收到请求后,将数据放在一个指定名字的回调函数的参数位置传回来。

ts使用jsonp:yarn add  @types/jsonp

浏览器:跨域及解决方法(前端解决浏览器跨域问题)

举例:jsonp调用360接口

https://www.csdn.net/tags/NtDakg5sNjA3NDAtYmxvZwO0O0OO0O0O.html

举例:jsonp调用百度接口

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style> *{ margin:0; padding: 0; } body{ padding: 50px; } input{ width: 300px; } ul{ width: 300px; border: 1px solid #FF69B4; display: none; } li{ list-style: none; } li a:hover{ color: hotpink; } </style> </head> <body> <input type="text" id="q" /> <ul id="ul1"></ul> <script type="text/javascript"> function doJson(data){ var oUl=document.getElementById('ul1') var html=''; if(data.s.length){ oUl.style.display = 'block'; for(var i=0;i<data.s.length;i++){ html+='<li><a href="https://www.baidu.com/s?&wd='+data.s[i]+'">'+data.s[i]+'</a></li>' } oUl.innerHTML=html; }else{ oUl.style.display='none' } } window.onload=function(){ var oQ=document.getElementById('q') var oUl=document.getElementById('ul1') oQ.onkeyup=function(){ if(this.value !=""){ var oScript=document.createElement('script') oScript.src='https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+this.value+'&cb=doJson' document.body.appendChild(oScript) }else{ oUl.style.display='none' } } } </script> </body></html>

3.4、CORS

CORS 是跨域资源分享(Cross-Origin Resource Sharing)的缩写。它是 W3C 标准,属于跨源 AJAX 请求的根本解决方法。

1、普通跨域请求:只需服务器端设置Access-Control-Allow-Origin

2、带cookie跨域请求:前后端都需要进行设置

3.5、webpack本地代理

proxy: { '/api/v1': { target: "http://xx.x.x.xxx:8080", pathRewrite: { '^/api/v1': '' }, secure: false, changeOrigin: true, logLevel: "debug" } }

3.6、websocket

Websocket 是 HTML5 的一个持久化的协议,它实现了浏览器与服务器的全双工通信,同时也是跨域的一种解决方案。WebSocket 和 HTTP 都是应用层协议,都基于 TCP 协议。但是 WebSocket 是一种双向通信协议,在建立连接之后,WebSocket 的 服务器与 客户端都能主动向对方发送或接收数据。同时,WebSocket 在建立连接时需要借助 HTTP 协议,连接建立好了之后 client 与 server 之间的双向通信就与 HTTP 无关了。

3.7、Nginx反向代理

Nginx 实现原理类似于 Node 中间件代理,需要你搭建一个中转 nginx 服务器,用于转发请求。

使用 nginx 反向代理实现跨域,是最简单的跨域方式。只需要修改 nginx 的配置即可解决跨域问题,支持所有浏览器,支持 session,不需要修改任何代码,并且不会影响服务器性能。

我们只需要配置nginx,在一个服务器上配置多个前缀来转发http/https请求到多个真实的服务器即可。这样,这个服务器上所有url都是相同的域 名、协议和端口。因此,对于浏览器来说,这些url都是同源的,没有跨域限制。而实际上,这些url实际上由物理服务器提供服务。这些服务器内的 javascript可以跨域调用所有这些服务器上的url。

注意:htpps协议网站不能嵌套http协议的页面

3.8、在nuxt3项目通过接口转发实现跨域。

nuxt3:接口转发,实现跨域_snowball@li的博客-CSDN博客

四、关注我,一起学习

五、参考链接:

什么是跨域?跨域解决方法_越努力,越幸运!-CSDN博客_跨域

本文链接地址:https://www.jiuchutong.com/zhishi/293070.html 转载请保留说明!

上一篇:前端vscode必备插件(强烈推荐)(前端vscode配置)

下一篇:Pytorch机器学习(八)—— YOLOV5中NMS非极大值抑制与DIOU-NMS等改进(pytorch如何学)

  • 揭秘自媒体微信公众号快速加粉(微信号自媒体怎么赚钱)

    揭秘自媒体微信公众号快速加粉(微信号自媒体怎么赚钱)

  • 英特尔第 14 代 Meteor Lake-P 移动 CPU评测(英特尔第一代14纳米)

    英特尔第 14 代 Meteor Lake-P 移动 CPU评测(英特尔第一代14纳米)

  • OPPOFind X3电池容量是多少(oppofindx3电池容量多少)

    OPPOFind X3电池容量是多少(oppofindx3电池容量多少)

  • qq空间注销后还能可以恢复使用吗(QQ空间注销后还能)

    qq空间注销后还能可以恢复使用吗(QQ空间注销后还能)

  • 苹果11桌面删除的软件怎么找回(苹果11桌面删除的图标怎么恢复)

    苹果11桌面删除的软件怎么找回(苹果11桌面删除的图标怎么恢复)

  • n卡安装程序失败(n卡安装程序失败重启黑屏了)

    n卡安装程序失败(n卡安装程序失败重启黑屏了)

  • 华为手机充电口(华为手机充电口松动怎么变紧)

    华为手机充电口(华为手机充电口松动怎么变紧)

  • 登录超时是什么意思(登录显示超时什么原因)

    登录超时是什么意思(登录显示超时什么原因)

  • 手机插头发烫怎么回事(手机插头很烫)

    手机插头发烫怎么回事(手机插头很烫)

  • 抖音能直播电影吗(抖音能直播电影电视剧吗)

    抖音能直播电影吗(抖音能直播电影电视剧吗)

  • 微信使用听筒播放语音什么意思(微信播放听筒)

    微信使用听筒播放语音什么意思(微信播放听筒)

  • vivox30是不是5g手机(vivox30是5g手机吗?)

    vivox30是不是5g手机(vivox30是5g手机吗?)

  • b站绑定的手机号注销了怎么办(b站绑定的手机号被占用)

    b站绑定的手机号注销了怎么办(b站绑定的手机号被占用)

  • 苹果下载为什么要按两下(苹果下载为什么需要验证)

    苹果下载为什么要按两下(苹果下载为什么需要验证)

  • 苹果11拨号声音怎么关(苹果拨号声音怎么调大)

    苹果11拨号声音怎么关(苹果拨号声音怎么调大)

  • 淘宝实名制可以改吗(淘宝实名制可以注销吗)

    淘宝实名制可以改吗(淘宝实名制可以注销吗)

  • 手机导航怎么看方向(手机导航怎么看方向视频教学)

    手机导航怎么看方向(手机导航怎么看方向视频教学)

  • 超链接字体颜色怎么改(超链接字体颜色、下横线怎么改)

    超链接字体颜色怎么改(超链接字体颜色、下横线怎么改)

  • 抖音几点发容易上热门(抖音几点发容易有浏览量)

    抖音几点发容易上热门(抖音几点发容易有浏览量)

  • 两份ppt怎么整合(如何把两份ppt放在一起)

    两份ppt怎么整合(如何把两份ppt放在一起)

  • 腾讯视频投影到电视功能怎么没了(腾讯视频投影到电视上怎么弄)

    腾讯视频投影到电视功能怎么没了(腾讯视频投影到电视上怎么弄)

  • 苹果充值记录怎么删除(苹果充值记录怎么永久删除消费记录)

    苹果充值记录怎么删除(苹果充值记录怎么永久删除消费记录)

  • 西瓜视频如何分享转发(西瓜视频如何分屏观看)

    西瓜视频如何分享转发(西瓜视频如何分屏观看)

  • 酷狗音乐如何复制歌曲链接(酷狗音乐如何复制歌词手机)

    酷狗音乐如何复制歌曲链接(酷狗音乐如何复制歌词手机)

  • neoCopy.exe - neoCopy是什么进程 有什么用

    neoCopy.exe - neoCopy是什么进程 有什么用

  • EasyExcel解析动态表头及导出(easyexcel解析csv)

    EasyExcel解析动态表头及导出(easyexcel解析csv)

  • 贝纳斯克,西班牙韦斯卡 (© Miscelleneoustock/Alamy)(贝纳克波斯图干红葡萄酒)

    贝纳斯克,西班牙韦斯卡 (© Miscelleneoustock/Alamy)(贝纳克波斯图干红葡萄酒)

  • 个人所得税清算怎么操作
  • 已抵扣的进项税发票怎么查询明细
  • 土地增值税扣除成本
  • 代扣代缴个人所得税手续费返还 增值税
  • 吴中区个体户如何办理
  • 出售交易性金融资产发生的净损失应计入营业外支出
  • 设备出租的账务处理
  • 技术服务费3%
  • 综合年度自行申报后要怎么操作
  • 买电脑所有配件
  • 核定征收需要什么条件和手续
  • 退回多报的教育费附加如何做账
  • 一般纳税人暂估成本的账务处理
  • 制造企业需要设哪些部门
  • 购房补贴退契税3个月没到账
  • 按应收账款余额计提坏账准备的会计分录
  • 处理报废的固定资产
  • 企业购买房屋的行为涉及哪些税种
  • 受托软件开发不转让著作权的账务处理
  • 互联网企业交什么保险
  • 附加税税种认定不完整是什么意思
  • 营改增后小规模纳税人如何报税
  • 普通发票跨月能入账吗
  • 调整上年度多计提费用
  • 分期收款发出商品属于什么科目
  • win7硬盘安装win10教程
  • 发票备注栏填写要求
  • 购买办公用品发放给各部门使用
  • 财政收回额度怎么记账
  • PHP:mb_encode_numericentity()的用法_mbstring函数
  • 进项税年末需要结转么
  • 工厂采购部门
  • 阿佩勒斯
  • 企业一部分房屋出租后怎样缴纳房产税
  • 最大的apple商店
  • php header refresh
  • 股权收购印花税填哪里
  • Swagger-的使用(详细教程)
  • web前端面试题2021及答案
  • 发票必须在什么时候开
  • 银行的社保缴费基数好高啊
  • php显示当前时间
  • 利润表中的本期金额和本年累计金额
  • 支付给非金融机构的费用
  • mysql最新版怎么中文
  • 公司财务报表中不设其他综合收益项目可以吗
  • 职工给单位造成损失可以申请仲裁吗
  • 什么情况下一般疑问句用does
  • 货款发票如何入账
  • 跨年度发票能否税前扣除
  • 货物已发出可以退款吗
  • 税务局手续费返还什么时间到账
  • 工程结算怎么结转收入
  • 重大水利工程建设
  • 库存现金的使用限额
  • 其他权益工具确认递延所得税负债
  • 成本法与权益法的区别会计分录
  • mysql中索引的使用
  • ubuntu server教程
  • ubuntu20.04怎么用
  • window7 aero
  • xp系统插u盘没反应怎么解决
  • windows登录密码设置
  • helpcfg是什么文件
  • eudcedit.exe
  • 有没有win8系统
  • 简述linux的系统结构
  • win7系统怎么访问共享文件
  • 安卓框架app
  • BootStrap TreeView使用实例详解
  • 个人简历
  • unity做3d游戏
  • Node.js中的核心模块包括哪些内容?
  • 用javascript写表单代码
  • 下载python教程
  • python数字类型及操作
  • javascript总结笔记
  • window10脚本错误
  • 增值税已申报但是忘清卡
  • 什么是私人帐户
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设