php-HTTP请求标头可被本地服务器识别,但不能被在线服务器识别

我制作了一个简单的PHP应用程序,提供了RESTful API,用于注册,登录和更新用户的地理位置.我在本地Apache服务器上使用MySQL数据库进行了测试,一切都很好.

最近,我将PHP代码迁移到了在线主机HostGator.当涉及识别HTTP请求标头时,我的部分代码停止工作.像这样:

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Authorization: f0cc696e44f76f9638331b5487f4b01d
Content-Type: application/x-www-form-urlencoded 
Accept: */*
DNT: 1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4

我编写了PHP代码,以便它读取标头Authorization下的api-key.在我的本地服务器上运行正常,但报告在HostGator上迁移相同代码时缺少api键

我怀疑某些设置在我的本地环境中是默认设置,但需要在HostGator中明确设置.这是我当前的.htaccess:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$%{ENV:BASE}index.php [QSA,L]
AddType application/x-httpd-php54 .php

我将XAMPP用于本地服务器和数据库,并将Chrome扩展Advanced Rest Client用于发送HTTP请求.

编辑:我的代码来检索标头值:

$headers = apache_request_headers();

if (isset($headers['Authorization'])) {
    $api_key = $headers['Authorization'];
    // validating api key
    // ...
} else {
    // api key is missing in header
    // ...
}

解决方法:

您正在使用授权标头作为自定义API密钥.那不是故意的,Apache会丢弃无效的Authorization标头.
我从Request headers bag is missing Authorization header in Symfony 2?中学到的

因此,您需要使用实际的自定义标头.
而不是使用授权字段将密钥发送为

X-Apikey: this_is_my_magic_key_that_put_in_the_header

然后将其检索为

$headers['X-Apikey'];

Apache不会丢弃它.

注意:标题将在新单词上显示CamelCased.发送“ X-API-KEY”成为“ X-Api-Key”,因此请使用上面的格式来正确检索它.

上一篇:mit6.828 lab2心得


下一篇:wav音频文件的提取和分析(matlab)