部署到服务器后前端传递的token后端接收不到的问题

avatar
作者
筋斗云
阅读量:1

前言:springboot+vue的一个项目,使用了nginx做反向代理

问题:前端传递的token,后端死活都拿不到,导致请求都被拦截器拦截下来,返回未登录的状态码,前端传递的token名字是tt_token,在本地运行的时候是完全没问题的(本地没用nginx做代理),甚至在postman上测试也是可以接收到token的,但是部署到服务器上时(用了nginx做代理),后端就接收不到了。

原因:原来nginx会默认丢弃带有下划线的请求头,下面贴一段官网的解释

Missing (disappearing) HTTP Headers?
If you do not explicitly set underscores_in_headers on;, NGINX will silently drop HTTP headers with underscores (which are perfectly valid according to the HTTP standard). This is done in order to prevent ambiguities when mapping headers to CGI variables as both dashes and underscores are mapped to underscores during that process.

翻译过来就是:NGINX将静默地丢弃带有下划线的HTTP标头,这样做是为了防止在将头映射到CGI变量时出现歧义,因为在该过程中,短划线和下划线都映射到下划线。

解决办法(2选1即可):
1.将请求头统一用中划线代替,例如tt_token改为tt-token
2.在nginx的配置文件中添加这一行代码:underscores_in_headers on;

nginx官网中列出的一些常见的问题以及解释:
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!