详解Spring MVC CORS 跨域
程序员文章站
2023-12-20 15:18:10
介绍
跨域cors,全称是"跨域资源共享"(cross-origin resource sharing)
当页面发出跨域请求时:
1、简单请求(先简单理解为正...
介绍
跨域cors,全称是"跨域资源共享"(cross-origin resource sharing)
当页面发出跨域请求时:
1、简单请求(先简单理解为正常的get/post吧):
浏览器将请求的地址添加到header的origin里面发送请求。接下来就看后台如何处理了。
2、非简单请求(姑且简单理解成content-type:"application/json"吧):
浏览器会先发个预检请求(preflight),也就是options请求。服务器返回是否许可访问和支持的请求方式,浏览器再决定是否发出请求。
使用@crossorigin注解
用法很简单,只需在controller或者方法上面添加注解即可。在controller上用表示整个controller下的方法都支持跨域
@controller public class homecontroller { @crossorigin @requestmapping("/") public string index() { return "index"; } }
参数说明
- origins: 表示允许跨域的地址
前面的http(s)必须加,默认*表示全部 - value: origins的别名
- allowedheaders: 在options请求中,返回的access-control-allow-headers
这个参数限定了客户端只能发送的header参数,不在此范围内浏览器阻止发出请求。默认* - exposedheaders: 对应access-control-expose-headers
该字段可选。cors请求时,xmlhttprequest对象的getresponseheader()方法只能拿到6个基本字段:cache-control、content-language、content-type、expires、last-modified、pragma。如果想拿到其他字段,就必须在access-control-expose-headers里面指定。上面的例子指定,getresponseheader('foobar')可以返回foobar字段的值。 - methods: 允许的请求方法,像get,post这些
- allowcredentials: 对应access-control-allow-credentials 该字段可选。它的值是一个布尔值,表示是否允许发送cookie。默认情况下,cookie不包括在cors请求之中。设为true,即表示服务器明确许可,cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送cookie,删除该字段即可。
- maxage: 对应access-control-max-age 用来指定预检请求的有效期(秒),在有效期内不在发送预检请求直接请求。默认1800秒,即30分钟。
使用spring配置文件
这个适合用于全局的配置,对应的字段跟crossorigin差不多。path表示允许跨域的路径。
<mvc:cors> <mvc:mapping path="/**" allowed-methods="*"/> </mvc:cors>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。