分析web前端开发中跨域问题
本篇内容介绍了"分析web前端开发中跨域问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
什么同源策略
同源策略:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。所谓同源是指协议+域名+端口三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
Url组成部分
了解同源策略以后,同样需要对url的组成部分也顺带了解一下吧,只有了解url之后当出现跨域的时候才知道哪里出了问题,这样才能和后端、运维开怼,怼天怼地对空气。O(∩_∩)O哈哈~
从上图中能够清晰的看出url中每个部分的含义:
鸿蒙官方战略合作共建--HarmonyOS技术社区
protocol:协议常用的协议是http
auth:验证,因为明文传输用户名和密码,非HTTPS环境下很不安全,一般用的非常少
hostname:主机地址,可以是域名,也可以是IP地址
port:端口http协议默认端口是:80端口,如果不写默认就是:80端口
pathname:路径网络资源在服务器中的指定路径
serarch:查询字符串如果需要从服务器那里查询内容,在这里编辑
hash:哈希网页中可能会分为不同的片段,如果想访问网页后直接到达指定位置,可以在这部分设置
项目过程过程中经常会用到一些缓存,浏览器为了网页的安全在缓存的时候,由于同源策略的问题对其缓存内容进行了限制,其实想想也是对的,如果不使用同源策略的话,很容易冲掉缓存的东西。
鸿蒙官方战略合作共建--HarmonyOS技术社区
Cookie、LocalStorage和IndexDB等无法读取。
DOM无法获得。
AJAX请求不能发送。
当然浏览器也没有把所有的东西都限制了,比如图片、互联网资源等还是允许跨域请求的。允许跨域请求都是使用标签,只有三个标签是允许跨域加载资源:
鸿蒙官方战略合作共建--HarmonyOS技术社区
在项目开发过程中时不时的就会遇到下面这样抛出了错误,有的人可能在开发过程中没有遇到过,如果是的话,你可能遇到一个很不错的后端或者运维。
XMLHttpRequest cannot loadhttp://www.******.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
上面的报错就是典型的跨域报错,既然跨域这么常见到底都有哪些情况会导致跨域的问题:
说明 | 是否允许通信 |
---|---|
同一域名下 | 允许 |
同一域名下不同文件夹 | 允许 |
同一域名,不同端口 | 不允许 |
同一域名,不同协议 | 不允许 |
域名和域名对应ip | 不允许 |
主域名相同,子域名不同 | 不允许 |
同一域名,不同二级域名 | 不允许 |
不同域名 | 不允许 |
跨域解决方案
由于浏览器的限制造成了很多的跨域问题,同样也是为了安全,既然出现了跨域就必定要有一些对应的解决方案,总不能遇到跨域之后项目就不做了啊,可能瞬间就凉了。闲话就不多扯了。
JSONP
在遇到跨域的时候经常会提及到的一个词就是JSONP,一直在说JSONP?可是通过什么原理来实现的呢?我觉得应该了解一下到底什么再去了解一下实现固然原理也就懂得咯。
什么是JSONP
JSONP:JSON的一种"使用模式",可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于server1.example.com的网页无法与不是server1.example.com的服务器沟通,而HTML的