通过邮递员请求时,HTTP请求中带有下划线的标头参数在服务器端不可用

时间:2018-08-14 13:11:16

标签: node.js http-headers postman

以下是API调用的curl导出失败-

curl -X GET \
  'http://endpoint.in/dummy/path?mobile=777777777' \
  -H 'Content-Type: application/json' \
  -H 'auth_token: iubsaicbsaicbasiucbsa'

从日志中检查,标头参数auth_token在服务器端根本不可用。

但是,当直接作为命令发出时,相同的卷曲有效。我安装了最新的邮递员版本v6.2.3。 另外,当通过其他工具(例如Advanced REST client of chrome)请求时,相同的API端点也可以使用。

以前,我还检查过阅读此线程http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers

许多服务器(如nginx)都有一个配置,如果设置了该配置,则会丢弃名称中带有下划线的标头。

但是,由于无法确切确定服务器在其中的部署方式,因此无法进行相同的验证。这是一个节点应用程序,我们运行此命令来运行该应用程序-

nohup /bin/forever start -o logs/out.log -e logs/err.log app.js

ps -ef | grep node显示以下内容-

root      5981     1  0 Jul19 ?        00:00:00 /root/.nvm/v7.2.1/bin/node /usr/lib/node_modules/forever/bin/monitor app.js
root      5991  5981  0 Jul19 ?        00:00:04 /root/.nvm/v7.2.1/bin/node /usr/local/another/path/to/app.js

更新

这也通过Jmeter干扰了我们的自动化测试。

更新

我们在服务器上运行了nginx,它似乎正在调用节点进程。我们观察到在可以正常工作的服务器上,nginx配置文件具有此设置-

underscores_in_headers on;

但这在不起作用的服务器的配置文件中不存在。

另一个观察-我正在使用最新的邮递员版本-6.2.5,那里是问题所在。但是,当我将同一个邮递员收藏发送给另一位队友时,他在安装邮递员后将其击中,这对他有用。我仍然不确定问题是邮递员还是服务器设置。

1 个答案:

答案 0 :(得分:1)

标头中没有明确禁止使用下划线,但是在过去,对于CGI,下划线已转换为破折号。因此,NGINX和Apache HTTPD会将标头中的下划线视为潜在问题。

https://stackoverflow.com/a/22856867/2955337

您可以显式设置underscores_in_headers on;,但是默认设置为off,因此默认情况下NGINX不接受下划线

http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers

curl显然会将下划线转换为破折号来规避此问题。

https://github.com/requests/requests/issues/1292#issuecomment-15997612