IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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知识库]记一次前端解决跨域问题的实践

写在前面

关于同源策略是什么,解决跨域问题的方法,网上有很多原理性的介绍,但是缺少对实操的介绍。本文解决跨域问题的三大特点:

  1. 不需要改动后端服务器代码
  2. 不需要改动前端代码
  3. 通过代理来为响应头添加字段

前端开发过程中可能会遇到各种各样的跨域问题,如果你跟我报了类似的错误,需要在http/https请求的响应头中添加Access-Control-Allow-Origin字段,请耐心阅读这篇文章:)

遇到的问题

浏览器的同源策略相信大家都不会陌生,在前端开发的过程中由于浏览器同源策略的存在我们会遇到跨域的问题,直接表现为请求数据失败,像下面这样:
在这里插入图片描述
这个时候大家可能有这样的疑问:是服务端禁用了非同源的请求吗?如果是这样的话恐怕前端就无能为力了。这里先给出结论:答案是。同源策略、跨域这些概念都是浏览器的安全机制,服务端是能够正常返回响应数据的,只是被浏览器拦截了而已。下面验证该说法的正确性:
我们打开Chrome的调试工具,找到这条请求,右键Copy - Copy as cURL:
在这里插入图片描述
然后在命令行粘贴并回车:
在这里插入图片描述
发现了什么?服务端正常返回了我们请求的token数据,没有报错!因此可以验证我们以上的结论:该响应只是被浏览器拦截了,并不是服务端禁用了非同源的请求。那么怎么在前端解决这个跨域的问题呢?答案是:代理。

代理

根据以上的报错信息,我们可以知道报错的原因是:该请求的响应头中没有Access-Control-Allow-Origin字段,所以我们的目标是在响应头中加入该字段。具体怎么做呢?就是在本地搭建代理服务器。说到代理,可能很大一部分人会望而却步,觉得比较复杂(我之前也是其中之一)。其实没有那么复杂,下面我不讲原理,只讲实操。

安装whistle
该链接中有比较详细的操作步骤:http://wproxy.org/whistle/install.html
在这里我还是再重复一遍:
安装whistle之前首先要安装Node,相信各位前端小伙伴都不会陌生,因此不再赘述。
接下来在命令行输入以下命令安装whistle

$ sudo npm install -g whistle

安装完之后运行以下命令验证是否安装成功:

$ w2 help

如果出现以下内容表明whistle已安装成功:
在这里插入图片描述
接下来执行以下命令启动whistle:

$ w2 start

在这里插入图片描述
此时代理服务器已经启动成功了,接下来我们复制http://127.0.0.1:8899/到浏览器中便可打开whistle的配置页面:
在这里插入图片描述
配置方法如下:
在Values选项卡中创建一个json文件:
在这里插入图片描述
该json文件中的字段是我们希望加到响应头中的数据(http://localhost:6175是我本地开发的web服务器地址,这里换上你本地开发的地址即可)。为了使该数据生效,我们在Rules选项卡中创建一条规则:
在这里插入图片描述
该规则的意思是在向这两个地址请求数据时在响应头中添加responseHeader.json中的字段。
这里需要注意的是这两个地址都是https服务,默认情况下whistle是不会去拦截https请求的,要想让whistle能够拦截https请求,需要安装根证书。安装方法也很简单,这里给出链接:http://wproxy.org/whistle/webui/https.html
简言之,点击以上界面中的HTTPS按钮然后点击弹出的二维码下载证书,并勾选Capture TUNNEL CONNECTs开启对https的捕获。随后点击下载的证书文件,将其添加到系统中并设置始终信任该证书即可。
安装浏览器代理插件SwitchyOmega
Chrome插件地址:https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif
添加完该插件后配置如下:
在这里插入图片描述
即设置我们开启的whistle服务器为代理服务器。
到现在为止,我们已经做完了所有的工作。
看下效果:
配置代理前:
在这里插入图片描述

配置代理后:
在这里插入图片描述
我们看下响应头:
在这里插入图片描述
在这里插入图片描述
可以看到在Response Headers中果然加入了我们配置的3个字段,成功!

写在最后

以上代理帮我们做的事是为响应头增加允许同源的字段,如果你也想达到这样的目的,但是实操了以上步骤后还是不能解决你的问题欢迎在下面评论,我会努力帮你解决~

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 11:48:44  更:2021-09-03 11:48:50 
 
开发: 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年11日历 -2024/11/23 15:14:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码