我正在开展一个项目,我需要在所有请求中从localStorage中的值设置自定义http标头。由于我的网络应用程序必须从客户端获取价值,因此我很难弄清楚如何确保用户发送的每个Http请求都包含此标头。
在请求中设置标头后,它将使用servlet过滤器传播到响应。过滤器检查请求中的标头并重定向到初始化页面,我可以使用该页面获取localStorage值并设置所需的任何监听器。
public void doFilter( @NotNull final ServletRequest request,
@NotNull final ServletResponse response,
FilterChain filterChain ) throws IOException, ServletException {
final HttpServletRequest hsr = (HttpServletRequest) request;
final String value = hsr.getHeader("Custom-Header");
if( isNullOrEmpty(value) ) {
((HttpServletResponse) response).sendRedirect("./init.html");
} else {
((HttpServletResponse)response).setHeader("Custom-Header", value);
filterChain.doFilter(request, response);
}
}
因此,在客户端,如果需要,我应该在响应中使用标头。我无法提出一个干净的跨浏览器解决方案,以确保初始化后的所有传出http请求都设置了此自定义标头。
我喜欢MDN的基于观察者的解决方案:https://developer.mozilla.org/en-US/docs/Setting_HTTP_request_headers但我不能完全依赖其他浏览器不支持的XPCOM组件。