script标签crossorigin属性及同源策略和跨域方法
2021/5/15 18:55:16
本文主要是介绍script标签crossorigin属性及同源策略和跨域方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
首先介绍(同源策略)
同源策略是浏览器最核心且基本的安全约定,要求协议、域名、端口都相同为同源,如果非同源时请求数据浏览器会在控制台抛出跨域异常错误,同源策略是浏览器的行为,即使客户端请求发送了,服务端也响应了,但是会拦截,浏览器无法接收到响应数据,保证了数据的安全,避免XSS攻击
跨域的解决办法:
一:document.domain设置
两个不同的源(子域等情况)可以通过设置document.domain告诉浏览器它们是同一个源,想要实现它们两个之间的通信两个都需要设置相同的document.domain
缺点:
用于父域和子域的情况;存在安全性问题,如果其中一个被攻击,另一个也会引起安全问题;适用范围为cookie共享或iframe使用(获取DOM等);
二:JSONP
原理:动态创建script标签,向服务器发送请求,设置script标签src属性后接callback=回调函数,回调函数名与响应一致,响应成功触发回调函数获取响应的数据
缺点:
存在安全问题,需要进一步做安全验证如token等信息;请求方式只能为get请求;
三:CORS
跨域资源共享,设置响应头,允许某个域或全部向服务器发送请求(Access-Control-Allow-Origin: '*')无请求方法限制
四:HTML5新增的window.postMessage API
允许跨窗口通信,无同源限制,postMessage(data, origin)参数一为通信内容,参数二为接收通信的窗口可以为*(所有),然后通过window.addEventListener('message', function(e){})监听message事件,e有三个属性值e.source:发送信息的窗口,e.origin:接收信息的窗口,e.data:通信的内容
五:window.name
只要在同一个窗口,无同源限制,可以通过window.name通信,window.name值长无限制,但须监听window.name值变化,影响应用性能
六:location.hash
即url#后面的片段,可以通过window.onhashchange方法监听获取通信内容
七:websocket
websocket通信协议采用ws://(非加密)wss://(加密)作为协议前缀,无同源限制,服务器可以通过验证请求头的origin实现通信
前端使用window.onerror事件捕获js脚本错误信息,当前端通过script标签加载跨域资源时window.onerror无法获取这些资源中的报错信息,会得到script error,无法知道具体错误,通过设置script标签的crossorigin属性就可以捕获到跨域资源的具体报错信息,对于通过CDN引入js时很有帮助
也需要请求的跨域资源设置Access-Control-Allow-Origin的响应头,不然无法访问该资源
这篇关于script标签crossorigin属性及同源策略和跨域方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-01使用 SVN合并操作时,怎么解决冲突的情况?-icode9专业技术文章分享
- 2025-01-01告别Anaconda?试试这些替代品吧
- 2024-12-31自学记录鸿蒙API 13:实现人脸比对Core Vision Face Comparator
- 2024-12-31自学记录鸿蒙 API 13:骨骼点检测应用Core Vision Skeleton Detection
- 2024-12-31自学记录鸿蒙 API 13:实现人脸检测 Core Vision Face Detector
- 2024-12-31在C++中的双端队列是什么意思,跟消息队列有关系吗?-icode9专业技术文章分享
- 2024-12-31内存泄漏(Memory Leak)是什么,有哪些原因和优化办法?-icode9专业技术文章分享
- 2024-12-31计算机中的内存分配方式堆和栈有什么关系和特点?-icode9专业技术文章分享
- 2024-12-31QT布局器的具体使用原理和作用是什么?-icode9专业技术文章分享
- 2024-12-30用PydanticAI和Gemini 2.0构建Airflow的AI助手