简答说说跨域
一、什么是跨域
跨域是针对浏览器的“同源策略”提出的说法。之所以有“同源策略”这种模式是基于网络安全方面的考虑。所谓的同源策略关注三点:
- 协议( http://www.baidu.com & https://www.baidu.com 协议不同,跨域)
- 域名(https://www.aliyun.com & https://developer.aliyun.com 域名不同,跨域)
- 端口(http://localhost:8080 & http://localhost:8000 端口号不同,跨域)
二、哪些网络资源涉及到跨域
“同源策略”对于跨域网络资源的设定非常的清晰。这些场景涉及到跨域禁止操作:
- 无法获取非同源网页的 cookie 、 localstorage 和 indexedDB 。
- 无法访问非同源网页的 DOM ( iframe )。
- 无法向非同源地址发送 AJAX 请求或 fetch 请求(可以发送,但浏览器拒绝接受响应)。
为什么要阻止跨域呢?上边我们说过是基于安全策略:比如一个恶意网站的页面通过 iframe 嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的 javascript 脚本就可以在用户登录银行的时候获取用户名和密码。
三、如何解决跨域
针对跨越问题我们该如何解决,主流的方案有以下:
- 通过 jsonp 跨域
- document . domain + iframe 跨域
- location . hash + iframe
- window . name + iframe 跨域
- postMessage 跨域
- 跨域资源共享( CORS )
- nginx 代理跨域
- nodejs 中间件代理跨域
- WebSocket 协议跨域
四、关于跨域需要明确的问题
跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了。
每次需求都会发出,服务器端也会做出响应,只是浏览器端在接受响应的时候会基于同源策略进行拦截。
注意:有些浏览器不允许从 HTTPS 的域跨域访问 HTTP ,比如 Chrome 和 Firefox,这些浏览器在请求还未发出时就会拦截请求,这是特例。
<完>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~