当前位置:首页 > 每日看点

浏览器的跨域 get请求也会有跨域问题吗?

卡卷网1年前 (2025-04-04)每日看点248

一、为什么浏览器要限制跨域?

1.1 同源策略:互联网的"防盗门"
浏览器的同源策略就像小区的防盗门,规定只有同源(协议+域名+端口一致)的脚本才能互相访问资源。比如:

  • http://a.comhttps://a.com(协议不同)
  • http://a.comhttp://api.a.com(子域名不同)
  • http://a.com:80http://a.com:8080(端口不同)

为什么要有这个限制?
想象你在银行网站(bank.com)登录后,又打开了恶意网站(hacker.com)。如果没有同源策略,hacker.com的脚本可以直接读取bank.com的Cookie,盗取你的账户信息!

1.2 跨域请求的两种类型

  • 简单请求:GET/POST/HEAD + 普通Header(如Content-Type: text/plain)。浏览器直接放行,但会检查服务器返回的Access-Control-Allow-Origin头。
  • 复杂请求:PUT/DELETE + 自定义Header(如Authorization)。浏览器会先发OPTIONS预检请求,问服务器:"这个源能访问吗?"

二、5大跨域解决方案,总有一款适合你

2.1 CORS(跨域资源共享)​
现代浏览器的标配方案,后端只需加几行代码:

// Node.js示例 res.setHeader('Access-Control-Allow-Origin', 'http://your-frontend.com'); res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT');

✅ ​优点:支持所有HTTP方法,安全可控

⚠️ ​坑点:生产环境别用*通配符!否则等于敞开大门

2.2 JSONP:老项目的"救急包"

利用<script>标签无视跨域的特性:

<script src="http://api.com/data?callback=handleData"></script>

后端返回:handleData({"name": "张三"})

✅ ​优点:兼容IE6

❌ ​缺点:只支持GET,有XSS风险

2.3 代理服务器:开发者的本地神器

Vue/React项目配置代理(以Vue为例):

// vue.config.js devServer: { proxy: { '/api': { target: 'http://real-api.com', pathRewrite: {'^/api': ''} // 隐藏代理痕迹 } } }

原理:浏览器→本地代理(同源)→真实服务器,完美绕过跨域

2.4 Nginx反向代理:生产环境首选

location /api/ { proxy_pass http://backend-server:8080/; add_header 'Access-Control-Allow-Origin' 'http://your-domain.com'; }

✅ ​附加Buff:负载均衡、静态资源缓存、隐藏服务器I

2.5 WebSocket:实时通信的绿色通道

const socket = new WebSocket('ws://api.com/chat');

✅ ​天生跨域:握手阶段走HTTP,后续长连接不受同源限制

三、实战避坑指南

3.1 线上跨域排查三步法

  1. 查响应头:有没有Access-Control-Allow-Origin?值对不对?
  2. 抓预检请求:OPTIONS请求是否返回200?
  3. 对参数:后端允许的Methods/Headers是否包含前端实际使用的?

3.2 特殊场景解决方案

  • 子域名跨域document.domain = '父域名'
  • iframe通信postMessage + 验证来源
  • 本地文件跨域:Chrome启动参数加--allow-file-access-from-files

3.3 安全红线

  • 生产环境永远别用Access-Control-Allow-Origin: *
  • JSONP必须过滤回调函数名,防止XSS
  • Nginx代理要设IP白名单,防止被恶意利用

​四、性能优化秘籍

  1. 预检请求缓存:设置Access-Control-Max-Age: 86400(24小时)
  2. 升级HTTP/2:多路复用减少延迟
  3. CDN加速:静态资源走CDN,动态API走反向代理

五、总结:如何选方案?

场景推荐方案
现代Web应用CORS + Nginx
本地开发代理服务器
兼容IE老旧项目JSONP(慎用)
实时通信WebSocket

互动时间
你在项目中遇到过哪些奇葩的跨域问题?是用了文中方案解决的吗?欢迎评论区分享你的故事!如果觉得有用,记得点赞+收藏,转发给身边被跨域折磨的小伙伴~

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/04/12259.html

分享给朋友:

相关文章

有什么音乐软件可以全部免费下载歌曲?

有什么音乐软件可以全部免费下载歌曲?

作为音乐发烧友, 我几乎把市面上所有的 发烧碟、试音碟,全都给收藏,下载下来了!音质都是无损的,品质特别高,有5.1环绕的、有DTS的、有中文的、有英文的。 大家可以看看这个音乐目录,大概有30万张专辑。 有需要下载软件的朋友,可以双击…

为什么微服务一定要有网关?

为什么微服务一定要有网关?

网关 一句话总结,网关的作用是上浮公共逻辑,下沉差异逻辑。公共逻辑就是所有接口都需要做的事,比如权限校验,限流算法等,这样业务就只需要关心业务逻辑即可。下面是一个对比图: 当然除了一些公共逻辑外, 路由也是网关的核心功能,它可以进行流量…

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

我说美国快要没招了,你信么? 这次台积电宣布停止向中国大陆客户供应7纳米及更先进AI芯片,再加上前段时间台积电对华为的制裁,我们基本可以认为,台积电在高端芯片领域,已经彻底把大陆给拉黑了,这也意味着中美芯片战已经到了最关键的时刻,一旦我们克…

网易云音乐上看到过最触动的热评是什么?

网易云音乐上看到过最触动的热评是什么?

1. “昨天晚上洗澡的时候,我忘记拿毛巾了,喊了声妈妈帮我拿下毛巾, 正当我伸出左手准备接毛巾的时候,我愣了一下,又换了右手。” 希望你永远不会听懂这句话, 永远都不要懂。 ——网易云热评《关键词》 2. 小时候跟着父亲去城里卖西瓜,害…

如何做电商行业?

如何做电商行业?

“如何做电商*开网店”跟“如何找老婆”一样,没概况条件、没明确标准,就是扯犊子。 我把话题具体一点说: 具备“两三万”启动资金、掌握“选品+上架优化”基础技能,小则月入三五千、多则上万。跟摆地摊一样,有进货的钱、也不怕苦不怕累、稍微有点生意…

有没有能够兼顾便携并且流畅运行各种AI应用的笔记本?求推荐?

有没有能够兼顾便携并且流畅运行各种AI应用的笔记本?求推荐?

看了下题主的描述,可以考虑「联想YOGA Air 15 Aura AI元启版」,今年9月底出的一款轻薄本,也通过了英特尔Evo严苛认证。 处理器用了英特尔最新的「酷睿 Ultra 7 258V」,主要亮点就是AI性能、图形处理能力和能效,很…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。