Spring boot CorsConfiguration.setMaxAge在SpringBoot应用程序中不工作
我正在尝试使用corscoConfiguration在应用程序中设置缓存控制。理想情况下,当我在DHC中调用Spring boot CorsConfiguration.setMaxAge在SpringBoot应用程序中不工作,spring-boot,cors,Spring Boot,Cors,我正在尝试使用corscoConfiguration在应用程序中设置缓存控制。理想情况下,当我在DHC中调用RESTAPI或PostMan时,我应该获得缓存控制最大年龄3600,但我得到的响应如下: 缓存控制:无缓存,无存储,最大年龄=0,必须重新验证 谁来帮我一下。提前谢谢 下面是我的Application.java类 @EnableCaching @SpringBootApplication public class Application extends SpringBootServlet
RESTAPI
或PostMan
时,我应该获得缓存控制最大年龄3600,但我得到的响应如下:
缓存控制:无缓存,无存储,最大年龄=0,必须重新验证
谁来帮我一下。提前谢谢
下面是我的Application.java类
@EnableCaching
@SpringBootApplication
public class Application extends SpringBootServletInitializer implements WebApplicationInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class); }
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setMaxAge(3600L);
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("POST");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
}
CorsConfiguration.setMaxAge按设计对缓存控制标头没有影响。所以问题中描述的是预期行为。Access Control Max Age是CorsConfiguration.setMaxAge实际影响的标头。看见另请注意:Access Control Max Age标头仅在响应CORS飞行前选项请求时发送。根据文档:“飞行前请求的响应可以被客户端缓存多长时间(以秒为单位)。”因此,如果在GET、POST等响应中发送,浏览器会忽略它。@sideshowbarker,感谢您的响应,我理解您上面所说的,但当我设置“config.setMaxAge(3600L);”这就是为什么我在调用API.CORSCOConfiguration.setMaxAge时,响应中没有获得访问控制最大年龄:3600。设计上故意对缓存控制头没有影响。所以问题中描述的是预期行为。Access Control Max Age是CorsConfiguration.setMaxAge实际影响的标头。看见另请注意:Access Control Max Age标头仅在响应CORS飞行前选项请求时发送。根据文档:“飞行前请求的响应可以被客户端缓存多长时间(以秒为单位)。”因此,如果在GET、POST等响应中发送,浏览器会忽略它。@sideshowbarker,感谢您的响应,我理解您上面所说的,但当我设置“config.setMaxAge(3600L);”这就是为什么我调用API时在响应中没有获得访问控制最大年龄:3600。