React Native Android使用fetch与服务器通讯无法读取Authorization

场景:

iOS使用fetch和curl 发送信息时候设置headers: {Authorization: token},

服务器都可以返回正确验证信息。

但是Android下使用fetch就不可以。

时间不允许,就放弃琢磨java代码了,所以另辟蹊径:服务器直接返回客户端提交的header信息,对比一下。

有大小写的区别?

服务器君没有大小写一视同仁么?

他是这么读取这个header信息的(忽略异常验证)

想了想服务器系统是CentOS,对大小写相当敏感,于是做进一步验证:

鉴于curl正常工作,那么设置curl的headers的Authorization为全小写authorization。

然后清理下服务器缓存,再次发送请求,嗯,服务器拒绝了我的请求。

到这里可以确定是服务器在度数组时候,键的大小写影响了结果。

问题找到了就好解决了:

祭出函数array_change_key_case 可参考

功能:返回键为大写或小写的数组,或者如果 array 非数组则返回 FALSE。

函数原型:array array_change_key_case ( array $input [, int $case = CASE_LOWER ] )

用下面的方式读取headers信息即可。

  • 另外一种方式

php的自定义头信息都可以使用$_SERVER[‘HTTP_*’]来获取,如header(‘test: wzhtest’);获取的时候,我们可以使用$_SERVER[‘HTTP_TEST’]来获取。

  • 这里说明下。Authorization可能是个例外。nginx没问题,但是Apache下可能会出现一个问题。那就是我们使用$_SERVER[‘HTTP_AUTHORIZATION’]可能就获取不到值。

解决办法可参考:

http://symfony.com/doc/current/setup/web_server_configuration.html#using-mod-proxy-fcgi-with-apache-2-4

 

You Might Also Like
发表评论