20200128——关于跨域问题

自己创建的实例之后,前端用的Vue,后端用springmvc。前端发送ajax请求后端数据的时候,控制台报错

Access to XMLHttpRequest at 'http://localhost:8080/loign/login' from origin 'http://127.0.0.1:8888' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

当请求不在同一域名下的资源文件(ip地址+端口号)时,会报如下错误:
“No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8080’ is therefore not allowed access.”,翻译下,因为被请求的资源没有设置 ‘Access-Control-Allow-Origin’,所以 从’http://localhost:8080’ 发起的请求不被允许。

原因:浏览器同源策略限制了此类请求。
什么是同源策略
同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

同源策略限制以下几种行为:

Cookie、LocalStorage 和 IndexDB 无法读取
DOM 和 Js对象无法获得
AJAX 请求不能发送

常见跨域场景

1.)同一域名下的不同文件或路径,允许访问。
http://www.domain.com/a.js
http://www.domain.com/b.js
http://www.domain.com/lab/c.js
2.)同一域名下的不同端口, 不允许访问。
http://www.domain.com:8000/a.js
http://www.domain.com/b.js
3.)同一域名下的不同协议, 不允许访问。
http://www.domain.com/a.js
https://www.domain.com/b.js
4.)同一ip地址下的不同域名之间,不允许访问。
http://www.domain.com/a.js
http://192.168.4.12/b.js
5.) 不同域名之间不允许访问。
http://www.domain1.com/a.js
http://www.domain2.com/b.js


JSONP弊端
JSONP只支持GET请求,什么?你要提交表单,sorry,此路不通
它只支持跨域HTTP请求

解决跨域

发布了716 篇原创文章 · 获赞 41 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_36344771/article/details/104103621