跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号(如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本身没有跨域问题,比如a标签、script标签、甚至form标签(可以直接跨域发送数据并接收数据)等。
一、什么是跨域
域名地址的组成:
1 | http:// www . google : 8080 / script/jquery.js |
1 | http:// (协议号) |
当协议、子域名、主域名、端口号中任意一各不相同时,都算不同的“域”。
不同的域之间相互请求资源,就叫“跨域”。
比如:
http://www.abc.com/index.html
请求 http://www.def.com/sever.php
跨域产生的原因是浏览器同源策略-SOP的限制,当前域名下的js只能读取同域的窗口属性。当使用js获取不同域名下的数据时,就会产生跨域的问题。只有双方在协议、主机和端口号都完全匹配的情况下,可以被授权访问。
需要注意的是,在服务器端是没有跨域之说的。比如我用node请求java数据时,即使两个的地址不一样,但是这个不是跨域,跨域是浏览器做的限制,防止获其他域名的cookies或者恶意的发送ajax请求等,别弄乱了,因为现在很多项目都为了前后端分离,用node做了中间层,但是对于网页来说,他是请求同域的nodejs,nodejs再转发请求,这里并没有发生跨域。至于java怎么判断这个请求是自己人,就是另一个话题了。咨询了同事,采用的一般是IP白名单或者api签名。
二、经验总结
1 |
|
1 |
|
参考文章:
跨域总结–JSONP,CORS,postMessage,子域名代理
本文标题: Ajax跨域问题解决方法-技巧篇
本文作者: 狂欢马克思
发布时间: 2024年01月02日 00:00
最后更新: 2025年04月03日 11:07
原始链接: https://haoxiang.eu.org/3047a232/
版权声明: 本文著作权归作者所有,均采用CC BY-NC-SA 4.0许可协议,转载请注明出处!