<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <h4>跨域请求</h4>
讯享网
跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指的是这样的一个概念:我们认为如果协议 + 域名 + 端口号均相同,那么就是同域,否则则是跨域的
跨域请求是由于浏览器的同源策略导致的,浏览器的同源策略是不能没有的(同源策略是浏览器最核心最基础的安全策略)
- 同源策略禁止 Ajax 直接发起跨域HTTP请求(其实可以发送请求,结果被浏览器拦截,不展示),同时 Ajax 请求不能携带与本网站不同源的 Cookie;如果没有同源策略别的域名就可以拿到你浏览器上其他的Cookie信息,这样会导致很多重要的信息泄露,例如不法的网站可能会利用你的cookie去登录一些网站,盗用你的信息等。
- DOM 层面的同源策略限制了来自不同源的对象或 JS 脚本,对当前对象的读取或设置某些属性;没有同源策略,一些脚本就能获取到你的用户密码输入框的内容信息
JSONP
JSONP 是一种非官方的跨域数据交互协议;JSONP 本质上是利用
JSONP 的理念就是:与服务端约定好一个回调函数名,服务端接收到请求后,将返回一段,在这段 代码中调用了约定好的回调函数,并且将数据作为参数进行传递。当网页接收到这段 代码后,就会执行这个回调函数,这时数据已经成功传输到客户端了
JSONP只支持 get请求,只支持 get请求,只支持 get请求
讯享网
CORS
跨源资源共享 Cross-Origin Resource Sharing(CORS) 是一个新的 W3C 标准,它新增的一组HTTP首部字段,允许服务端其声明哪些源站有权限访问哪些资源。换言之,它允许浏览器向声明了 CORS 的跨域服务器,发出 XMLHttpReuest 请求,从而克服 Ajax 只能同源使用的限制
CORS新增的HTTP头信息
- Access-Control-Allow-Origin | *
响应首部中可以携带这个头部表示服务器允许哪些域可以访问该资源
origin 参数的值指定了允许访问该资源的外域 URI。对于不需要携带身份凭证的请求,服务器可以指定该字段的值为通配符,表示允许来自所有域的请求
- Access-Control-Allow-Methods […, ] | *
该首部字段用于预检请求的响应,指明实际请求所允许使用的HTTP方法
- Access-Control-Allow-Headers […, ] | *
该首部字段用于预检请求的响应。指明了实际请求中允许携带的首部字段
- Access-Control-Allow-Credentials true | false
表示是否允许发送Cookie
注意:如果需要在 Ajax 中设置和获取 Cookie,那么首部字段不能设置为 ,必须设置为具体的 origin 源站
Configuration配置方式
讯享网
CrossOrigin注解方式
除了Configuration的配置方式外,springMVC4.2之后的版本都支持注解的方式,可以使用 注解来实现
讯享网
HttpServletResponse方式
讯享网
JsonP和CORS的比较
- 只能实现 GET 请求,而 支持所有类型的 HTTP 请求
- 使用 CORS 可以使用普通的 XMLHttpRequest 发起请求和获取数据,比 JSONP 有更好的错误处理
- CORS 的兼容性比不上 JSONP,一些比较老的浏览器只支持 JSONP

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/144129.html