跨域问题的理解
首先,跨域问题也算是计算机中的安全机制,是浏览器的安全机制。
跨域问题是什么造成的
- 浏览器的检查
- 访问了不同域名的资源
- 使用的xhr作为请求类型
准确的讲,是因为上面的三个条件同时成立的时候,才会有跨域问题的存在
如何解决跨域问题
一般有以下几种思路:
-
禁止浏览器的限制。这个是要在浏览器启动的时候加上对应的配置参数,让浏览器不检查请求。这样做是不安全的,同时也所限制于客户端,没有谁在打开浏览器的时候还要加上对应的参数来禁止检查。
-
只要是访问了不同域名的资源,就一定是跨域访问了,这个在直接访问的时候没法避免的。除非可以,在访问远程资源的之后,让其先访问不跨域的域名,然后在不跨域的域名上面做一个代理访问,这样也可以避免了跨域访问的问题了。
-
只要访问的类型不是xhr类型就可以避开这个限制。你的访问可以是scripty类型,也可以是json类型,这些类型的访问对浏览器来讲是不检查的。这里就是常说的jsonp (json for padding),scritp 类型 的请求。
前面都是客户端的解决思路。这里的jsonp是最常用的方式。但是jsonp是有局限性的。比如,只能是get请求,无法实现异步等。
浏览器是先执行,后判断。
跨域访问的时候在请求头中会有一个origin,里面当前=请求的域名。在拿到请求结果之后,会和服务器返回的可允许访问域名进行对比。检查是否支持访问。
客户端的是隐藏跨域访问,服务端的解决思路是支持跨域访问,在响应头返回对应的支持的域名,符合客户端域名检查即可。
客户端请求有简单请求和非简单请求。非简单请求会有两个请求。一个预检请求,一个真正的请求。非简单请求的预检命令。options请求,检查请求头中的数据是否是服务端允许访问的内容。需要在服务端响应头中加入access-contro-allow-header。
带cookie的跨域访问。这时origin不能使用通配符*,同时加上access_control_allow_credentials : true
上面的内容都是在2015年开发的时候解决方案,现在这些问题在nginx层面就已经解决了。这些都是互联网发展带来的优势,前后端分离加上网关和代理转发,这些问题自然就不存在了。
本文来自博客园,作者:Eular,转载请注明原文链接:https://www.cnblogs.com/euler-blog/p/18600255
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)