当前位置:首页 > 每日看点 > 正文内容

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

卡卷网10个月前 (04-04)每日看点175

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

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

分享给朋友:

相关文章

app拉新在哪接单?

app拉新在哪接单?

“提供500+款任务”,“一手渠道app拉新项目”,“纯绿色的”,“高佣金”,“当天做当天结/算”,“多年孵化经验”,“独立后台一对一帮扶持”以上这种还有人信吗???作为一个做了三个月时间并且也踩过坑的人告诉你,不要轻易相信发这种广告的,还...

荣耀magic 7 首发的应该都收到货了,感觉怎么样?

8号入手magic7,跟mate40pro比。优点:1、电池真耐用,充电块,华为电池也是新换的但是明显荣耀耐用;2、系统明显快多了,mate40pro下半年开始卡的不行,实在受不了了。3、声音、震动效果提升明显,指纹反应灵敏很多。 缺点:1...

有哪些是你用上了mac才知道的事?

用上了高端的Mac(已退货)才知道:原来文件夹里面的文件,你看到是8个,其实可能有12个。其中3个图标重叠在一起了,另外一个被拖动到屏幕外面了。用上了高端的Mac(已退货)才知道:原来鼠标灵敏度有问题是因为系统内置了鼠标加速度,只能用控制台...

无意中发现技术主管写的代码,大家帮忙看看什么水平?

无意中发现技术主管写的代码,大家帮忙看看什么水平?

虽然很多答主用了诸如“典范级”、“心旷神怡” 的形容, 赞美这段代码, 但这里, 出于技术讨论的动机, 我说说不同看法.栈, 如果善于利用栈来处理树结构, 那么可以写出更简洁的代码, 根本不需要 recuresiveFn 这种方法. 泛型,...

为什么神经网络可以解偏微分方程,是什么原理?

为什么神经网络可以解偏微分方程,是什么原理?

题主一直比较关心神经网络在其他科学领域的应用,比如数学、物理学还有生物学,比如AlphaFold。本次带来的这篇文章傅里叶神经网络算子解偏微分方程就是一个很有意思的方向,其实我自己去年在给美国一个客户做兼职预测数字货币期权价格的时候就用到过...

怎样拥有一台最便宜的服务器?

怎样拥有一台最便宜的服务器?

内容提示:主打一个 DIY + 极限白嫖 =)某宝花10块买一个“随身WiFi”,刷入Ubuntu,用SSH远程连接,但是记得一定要把外壳撬掉然后粘个散热器(哪怕是白萝卜也彳亍),否则会过热详细去酷安社区搜“随身WiFi”=========...

发表评论

访客

看不清,换一张

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