其他分享
首页 > 其他分享> > 服务器上获取不到header中设置的自定义的属性值

服务器上获取不到header中设置的自定义的属性值

作者:互联网

问题背景:

前后端开发完之后打包部署到服务器上,进行测试的时候,发现有个接口总是报“请求头缺少参数SESSION_ID”,碰到这个问题,作为一个后端开发,肯定会说前端没传呗!前端同事信誓旦旦的说的确传了,但是本地IDE启动项目进行联调的时候,后端确实收到了请求头中的参数,然后意识到可能是服务器环境问题,请求有没有跨域?有没有被转发?如果有的话,这之间会不会把请求头中的参数丢失? 然后一个一个排查,前后端分离,必然涉及到跨域,但是已经做了跨域处理,保证了请求头中的参数不会丢失;然后用命令看了下服务器上有没有nginx,发现有nginx,然后去查了一下,nginx代理转发丢失请求头的相关问题,发现nginx果然会丢失带下划线的请求头(如果不配置的话),然后去nginx的配置文件,配置相关配置,重启服务。

解决:

后端跨域配置:

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
public class SimpleCORSFilter extends OncePerRequestFilter {

    @Override
    public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws IOException, ServletException {
        String origin = request.getHeader("Origin");
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin);
        response.setHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "access_token");
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS,
                "Origin, X-Requested-With, Content-Type, ACTION, SESSION_ID, SOURCE, T_SOURCE, sessionId");
        // XX请求
        if (HttpMethod.OPTIONS.matches(request.getMethod())) {
            response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS,
                    "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE");
            response.setHeader(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "86400");
            return;
        }

        filterChain.doFilter(request, response);
    }
}

nginx相关配置: nginx.conf 在配置http部分 添加如下配置,如图

underscores_in_headers on; ##(默认值是off)

 

 

最后,建议请求头中不要使用带下划线的参数!!!

标签:CONTROL,自定义,nginx,response,ACCESS,header,服务器,import,HttpHeaders
来源: https://www.cnblogs.com/xuchao0506/p/14809637.html