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

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

卡卷网8个月前 (04-04)每日看点149

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

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

分享给朋友:

相关文章

需要做一个微信小程序项目,大公司价格太高怎么办?

需要做一个微信小程序项目,大公司价格太高怎么办?

一个小程序制作开发多少钱构建一个微信小程序大概需要花费多少资金? 一、自主开发如果选择自主开发,这里面门道可不少。微信小程序认证费用: 300 /年域名费用: 30 - 80 /年服务器费用: 600 - 3000 /年这么一算,扣除人力成...

学了两个月网络安全,一直未入门怎么办,知乎大佬们给些建议吧?

学了两个月网络安全,一直未入门怎么办,知乎大佬们给些建议吧?

你才学两个月,就想入门,笑不活了,我学了8年了,还被人说是个菜鸟。我学了这么多的渗透,依然挖不到自己的漏洞。ailx10:学习CSRF漏洞ailx10:学习PHP XXE漏洞ailx10:学习CORS漏洞ailx10:学习ClickJack...

为什么说不懂电脑的不要碰AMD?

作为一个资深垃圾佬,说缺点前,先说优点吧AMD CPU(后续简称AU)的优点:处理器对比Intel,三级缓存更大,最明显的感知就是,网游帧数更高(5900X,7900X之类高端型号都是双CCX共享大缓存,反而不如次一点的CPU帧数更高);相...

是什么原因让你一定要用 iPhone?

是什么原因让你一定要用 iPhone?

1、不用清理内存,iPhone真的可以开机用上一年,你根本不用关注期间打开过什么软件。2、支持的频段足够多,天天在国内走动倒是无所谓,很多Android手机一旦出去了,就会发现很多运营商接入都是问题,更不用说各种本土化的服务了。3、屏幕素质...

为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?

开源可以垄断。人类最高的权力不是什么国家而是意识形态,能够控制别人的思维方式。你把你的东西开源出来了,其他人就会懒于思考,在这一个思考上使用你的方式。比如容器编排,经过了K8s后谁还会去开发那些奇奇怪怪的编排手段,直接用不就行了。形成了生态...

讲真,家庭真的需要一台NAS吗?

讲真,家庭真的需要一台NAS吗?

要想回答这个问题,讲一个故事大家都能明白了,至于需要不需要,大家可以自己判断。现在的家庭,一般都会有很多家具,比如漂亮大气的书柜鞋柜,用来放鞋衣柜,用来放衣服书架,用来放书。还有碗柜,床头柜等等。当然,没有上述东西的家庭也存在,但是这些家具...

发表评论

访客

看不清,换一张

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