前言
前后端分离以后,本地调试时经常遇到跨域的场景。除了通过一些常规的方式如配置代理来解决,还可以通过修改chrome配置,配置私有化的chrome来实现
1.版本号49以前的配置方法
步骤:
1.首先新建一个chrome快捷方式,最好改个名字和原来的做个区分。如:跨域版chrome。这样就可以根据不同的需求使用不同的chrome。
2.下载并安装好chorme浏览器后在桌面找到浏览器快捷图标并点击鼠标右键的属性一栏。
3.在属性页面中的目标输入框里加上 --disable-web-security
(要用空格隔开)
4.点击应用和确定后关闭属性页面,并打开chrome浏览器。如果浏览器出现提示“你使用的是不受支持的命令标记 --disable-web-security”,那么说明配置成功。
2.版本号49以后的配置方法
chrome的版本升到49之后,跨域设置比以前严格了,在打开命令上加--disable-web-security之后还需要给出新的用户个人信息的目录。众所周知chrome是需要用gmail地址登录的浏览器,登录后就会生成一个存储个人信息的目录,保存用户的收藏、历史记录等个人信息。49版本之后,如果设置chrome浏览器为支持跨域模式,需要指定出一个个人信息目录,而不能使用默认的目录,估计是chrome浏览器怕用户勿使用跨域模式泄露自己的个人信息(主要是cookie,很多网站的登录token信息都是保存在cookie里)。
注意:如果删除此目录会导致私有化chrome中的书签、历史记录等个人信息全部丢失。
步骤:
1.第一步还是和上面一样。
2.在电脑上新建一个目录,例如:C:\MyChromeDevUserData
3.在属性页面中的目标输入框里加上 --disable-web-security --user-data-dir=C:\MyChromeDevUserData,--user-data-dir的值就是刚才新建的目录。(也要用空格隔开)
4.点击应用和确定后关闭属性页面,并打开chrome浏览器。
5.再次打开chrome,发现有“--disable-web-security”相关的提示,说明chrome又能正常跨域工作了。
MAC电脑的配置步骤:
1.在Mac的 /Users/xxx(你的用户名)/Documents 文件夹下创建文件夹 MyChromeDevUserData (该文件夹是用来保存关闭安全策略后的用户信息的,名字可以随意取,位置也可以随意放),然后在该文件夹右键新建位于该文件夹位置的终端窗口,并输入执行如下命令:
open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/xxx(你的用户名)/Documents/MyChromeDevUserData
2.回车,如果是第一次打开,应该Chrome会弹出一个窗口,点击启动Google Chrome,接下来打开的Chrome浏览器就可以直接访问跨域的链接了。
如果想要恢复安全模式咋办?把disable改成enable,再执行一遍即可。
3.更新98版本后出现了问题
某天chrome自动升级了,我发现在代理localhost资源的时候报了这样一个错误:
Access to XMLHttpRequest at 'https://localhost:8888/console.min.js' from origin '....com' has been blocked by CORS policy: Request had no target IP address space, yet the resource is in address space local.
这是由于通过 --disable-web-security 禁用 Web 安全时引起的副作用。它可能会阻止获取目标 IP 地址空间。
解决方法:
MAC:
在终端上运行此命令:
defaults write com.google.Chrome InsecurePrivateNetworkRequestsAllowed -bool true
Windows:
- 运行“regedit”以打开 Windows 注册表(如果出现权限问题,则使用管理员命令提示符运行该命令)
- 转到计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome(如果没有此目录就手动新建)
- 使用“InsecurePrivateNetworkRequestsAllowed”名称创建新的 DWORD 值
- 将值更改为“1”
- 重新启动浏览器