HTTP 头部 Access-Control-Max-Age 用法
【摘要】 代码示例这是一个 spring boot 常用的 CorsFilter 示例代码import org.springframework.stereotype.Component;import javax.servlet.*;import javax.servlet.http.HttpServletResponse;import java.io.IOException; @Componentpu...
代码示例
这是一个 spring boot 常用的 CorsFilter 示例代码
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(
ServletRequest req, //接收到的请求
ServletResponse res, //要发送的响应
FilterChain chain) //将请求传递到下一个过滤器或目标资源(如servlet)
throws IOException, ServletException {
//System.out.println("*********************************过滤器被使用**************************");
HttpServletResponse response = (HttpServletResponse) res;
//设置跨域资源共享(CORS)的允许来源为任意域(*)。这意味着任何域都可以访问这个资源。
response.setHeader("Access-Control-Allow-Origin", "*");
//允许前端请求携带凭证(如Cookies和HTTP认证信息)
response.setHeader("Access-Control-Allow-Credentials", "true");
//设置允许的HTTP请求方法,包括POST、GET、OPTIONS和DELETE
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
//设置预检请求的结果(即OPTIONS请求)能够被缓存多久(以秒为单位)。这里设置为3600秒(1小时)
response.setHeader("Access-Control-Max-Age", "3600");
//设置允许的HTTP请求头,这里允许x-requested-with和content-type
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
//调用FilterChain对象的doFilter方法,将请求和响应传递到下一个过滤器或目标资源(如servlet)
chain.doFilter(req, res);
}
@Override
public void destroy() {
}
}
Access-Control-Max-Age
定义
Access-Control-Max-Age
是一个HTTP响应头,它用于指定预检请求(即OPTIONS请求)的结果可以被缓存的时间长度(以秒为单位)。预检请求是浏览器在发送跨域请求之前自动发送的一种请求,用于检查服务器是否允许跨域请求。
缓存的内容
- 预检请求的结果:这包括服务器对OPTIONS请求的响应,其中包含了跨域请求是否被允许的信息(如允许的HTTP方法、请求头等)。
缓存的请求类型
- OPTIONS请求:这是唯一被
Access-Control-Max-Age
缓存的请求类型。其他类型的请求(如GET、POST)本身不会被这个头缓存,但它们可以受益于预检请求结果的缓存。
示例解释
在提供的CorsFilter.java
文件中,Access-Control-Max-Age
被设置为3600秒(1小时)。这意味着浏览器在1小时内不会再次对相同的跨域请求发起预检请求(OPTIONS请求),而是直接使用缓存的预检请求结果。
总结
-
Access-Control-Max-Age
缓存的是预检请求(OPTIONS请求)的结果。 Access-Control-Max-Age
通过缓存预检请求的结果来优化跨域请求的性能,并不会直接缓存GET或POST请求,但它可以减少GET和POST请求发起前需要进行的预检请求次数,从而提高跨域请求的效率。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)