问题记录——跨域

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中间件来解决这个问题,可是以后发现浏览器仍是出现这个错误提示,因此如今可能有两个缘由:

  1. 上述利用cors解决跨域的方法不使用,改换成其余的跨域解决方法
  2. 这根本就不是跨域的问题

最后确认是缘由二,因而我从网上找来各类解决方案:webpack

  1. 缘由:chorme浏览器为了安全性考虑,默认对跨域进行访问禁止

解决方案:给浏览器传入启动参数(--allow-file-access-from-files),容许跨域访问或者改用火狐浏览器git

  1. 缘由:由于没有在服务环境里运行含有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/logingithub

总结(血的教训):只要是协议、域名或者端口号有任何一个不一样,都会被当作是不一样的跨域,写ajax请求时url务必写完整或者提早配置好web

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息