| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> 浏览器跨域 -> 正文阅读 |
|
[JavaScript知识库]浏览器跨域 |
完整高频题库仓库地址:https://github.com/hzfe/awesome-interview 完整高频题库阅读地址:https://hzfe.github.io/awesome-interview/ 相关问题
回答关键点
跨域问题的来源是浏览器为了请求安全而引入的基于同源策略的安全特性。当页面和请求的协议、主机名或端口不同时,浏览器判定两者不同源,即为跨域请求。需要注意的是跨域是浏览器的限制,服务端并不受此影响。当产生跨域时,我们可以通过 JSONP、CORS、postMessage 等方式解决。 知识点深入1. 跨域问题的来源跨域问题的来源是浏览器为了请求安全而引入的基于**同源策略(Same-origin policy)**的安全特性。同源策略是浏览器一个非常重要的安全策略,基于这个策略可以限制非同源的内容与当前页面进行交互,从而减少页面被攻击的可能性。 当页面和请求的协议、主机名或端口不同时,浏览器判定两者不同源,从而产生跨域。需要注意的是跨域是浏览器的限制,实际请求已经正常发出和响应了。 2. 如何判定跨域如上图所示,一个 origin 由协议(Protocol)、主机名(Host)和端口(Port)组成,这三块也是同源策略的判定条件,只有当协议、主机名和端口都相同时,浏览器才判定两者是同源关系,否则即为跨域。 3. 跨域的解决方案前端常见的跨域解决方案有 CORS、反代、JSONP 等。 3.1 CORS (Cross-Origin Resource Sharing)CORS 是目前最为广泛的解决跨域问题的方案。方案依赖服务端/后端在响应头中添加 涉及到的端 CORS 只需要服务端/后端支持即可,不涉及前端改动。 具体实现方式 CORS 将请求分为简单请求(Simple Requests)和需预检请求(Preflighted requests),不同场景有不同的行为: 简单请求 不会触发预检请求的称为简单请求。当请求满足以下条件时就是一个简单请求:
需预检请求 当一个请求不满足以上简单请求的条件时,浏览器会自动向服务端发送一个 OPTIONS 请求,通过服务端返回的 CORS 引入了以下几个以
当请求符合响应头的这些条件时,浏览器才会发送并响应正式的请求。 3.2 反向代理反向代理解决跨域问题的方案依赖同源的服务端对请求做一个转发处理,将请求从跨域请求转换成同源请求。 涉及到的端 反向代理只需要服务端/后端支持,几乎不涉及前端改动,只用切换接口即可。 具体实现方式 反向代理的实现方式为在页面同域下配置一套反向代理服务,页面请求同域的服务端,服务端请求上游的实际的服务端,之后将结果返回给前端。 3.3 JSONPJSONP 是一个相对古老的跨域解决方案。主要是利用了浏览器加载 JavaScript 资源文件时不受同源策略的限制而实现跨域获取数据。 涉及到的端 JSONP 需要服务端和前端配合实现。 具体实现方式 JSONP 的原理是利用了浏览器加载 JavaScript 资源文件时不受同源策略的限制而实现的。具体流程如下:
非常用方式
扩展阅读1. LocalStorage / SessionStorage 跨域LocalStorage 和 SessionStorage 同样受到同源策略的限制。而跨域读写的方式也可以使用前文提到的 postMessage。 2. 跨域与监控前端项目在统计前端报错监控时会遇到上报的内容只有 3. 跨域与图片前端项目在图片处理时可能会遇到图片绘制到 Canvas 上之后却不能读取像素或导出 base64 的问题。这个问题也是由同源策略引起。解决方式和上文相同,给图片添加 参考资料 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 11:23:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |