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

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

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

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

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

分享给朋友:

相关文章

普通人一部手机用多久?

普通人一部手机用多久?

各位知友,你们的现在的手机用了多久了呢? 回看国外分析机构 TechInsights的报告,目前大家的用机周期是越来越长了,在国内,也达到了「40个月」,就是很多人至少三年半才会换一次手机。 仔细想想,不对呀,现在新机不是一直出吗?…

推荐几个问卷调查平台?

推荐几个问卷调查平台?

我给大家免费推荐一些市面上不多,且稳定的免费的问卷平台,这个在网上都是能够搜索到的,有的还是世界500钱企业,这里推荐的基本上都是上市的问卷公司了。上面都是可以免费去注册的,对外公开开放的,做完了直接奖励美刀的,不需要兑换卡什么的。 C…

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

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

如何看待台积电,三星相继停供大陆7nm及更先进芯片?

在这个事出来之前,我就看到过一个说法,两家Foundry可以在中东建厂,让中东的Fab去干“脏活”。本质上是国内企业搞几个中东的代理人,装作是中东的初创Fabless企业去下单,人家Foundry大概率睁一只眼闭一只眼,只管数钱。然而,紧接…

大家都是怎么把自己的粉丝增加到1000的呢?

大家都是怎么把自己的粉丝增加到1000的呢?

截至2024年10月30日,关注者总数1137人,用时80天,增速约14人/天。 2024年8月10日开始创作,连续一周,1个关注者都没有。创作第7天,得到第一个关注,7天时间,写了8篇回答。当天得到关注,激动的心情历历在目。 没有一个…

为什么雷军身上没有酒色财气?

武大建校130周年时,雷军向母校个人捐款13亿。 在2023年8月14日晚上七点,雷总在国家会议中心举行的进行第四次年度演讲「成长」: 全篇都在谈成长、梦想,这么多年了,始终做到了知行合一,我相信酒色财气可能真不是他所追求的,一直追求的就像…

发表评论

访客

看不清,换一张

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