Access to XMLHttpRequest at 'localhost:3000/user/login' from origin 'http://127.0.0.1:3001 ' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
上面这句话我应该都能滚瓜烂熟了,由于它困扰了我好久,通过各类搜索引擎我找到了不少的答案,但没有一种解决方法使用于我此次遇到的问题。仔细看这个错误提示的前半句,感受像是跨域问题,由于个人浏览器端开的服务是3001端口,而服务端的服务是3000端口,那么这显然存在一个跨域问题,因而乎我利用express的cors中间件来解决这个问题,可是以后发现浏览器仍是出现这个错误提示,因此如今可能有两个缘由:
上述利用cors解决跨域的方法不使用,改换成其余的跨域解决方法
这根本就不是跨域的问题
最后确认是缘由二,因而我从网上找来各类解决方案:webpack
缘由:chorme浏览器为了安全性考虑,默认对跨域进行访问禁止
解决方案:给浏览器传入启动参数(--allow-file-access-from-files),容许跨域访问或者改用火狐浏览器git
缘由:由于没有在服务环境里运行含有ajax方法的页面,而是直接经过浏览器打开是不行的,即本地页面ajax请求本地页面,必须经过服务器环境运行 仔细看来这个问题,发现它实际上是XMLHttpRequest cannot load file:///Users/yzy/github/news-list/js/mock.json. Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, https, chrome-extension-resource.
因此跟个人问题是不同的,另外个人webpack已经配置了开发服务器,因此这个方法不适用
最后解决方法:最后发现其实这就是一个跨域问题,仔细看看问题,ajax请求localhost:3000/user/login
没有代表protocol,其实将ajax请求写完整加上http便可解决问题http://localhost:3000/user/login
github
总结(血的教训):只要是协议、域名或者端口号有任何一个不一样,都会被当作是不一样的跨域,写ajax请求时url务必写完整或者提早配置好 web