API请求不区分大小写的头部参数

时间:2020-01-29 作者:Anwer AR

我使用基于令牌的身份验证机制发出API请求。下面是请求示例。

TokenRequest({
     method: \'POST\',
     url: {URL HERE},
     headers: {\'Authorization\': Bearer {token}},
     params: {
        ... params ...
     }
}).then...Handle the rest
标题参数有问题Authorization 根据标准,它应该不区分大小写,并且几乎所有JS客户端(Fetch, Axios) 正在将标题转换为小写,因此authorization 和服务器期望Authorization (大写A)。

我的问题是如何使所有头参数不区分大小写?因此,它可以在任何情况下接受params。

1 个回复
SO网友:MrWhite

这似乎是一个;“故障”;WordPress(服务器)的方式正在读取HTTP请求标头。(如果在没有任何归一化的情况下将它们读入关联数组,则比较自然会区分大小写。)这可以说是;“固定”;在WP中。

但是,可以创建一个;解决方案;在里面.htaccess 并使用所需的大小写重新创建HTTP请求标头。ie。Authorization (大写A)代替authorization (全部小写,或通过任何大小写)。但是,您需要根据需要为每个标题执行此操作。

例如:

# 1. Save the current value in env var (Case of header name does not matter)
SetEnvIf authorization (.*) HEADER_VALUE=$1

# 2. Delete the current header (Case of header name does not matter)
RequestHeader unset "authorization" env=HEADER_VALUE

# 3. Recreate header with the required case (Case of header name is preserved)
#    env=HEADER_VALUE ensures the header is only set if it was set to begin with
RequestHeader set "Authorization" %{AUTHORIZATION_VALUE}e env=HEADER_VALUE
Apache在头上执行的任何比较都不区分大小写,因此未设置AuthorizationAUTHORIZATION 也会做同样的事情。读取AuthorizationAUTHORIZATION.

你必须完全unset 之前的标题set\'再次删除该标头,以保留所需标头名称的大小写。edit\'调用请求标头不会编辑名称,只会编辑值。

在我看来,这有点;“不寻常”;当HTTP header约定使用camel case时,这些JS库发送所有小写头,并让服务器根据需要规范化请求。