本地服务器识别的 HTTP 请求头,但在线服务器无法识别

The*_*ist 4 php apache rest hosting .htaccess

我制作了一个简单的 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

我将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
    // ...
}
Run Code Online (Sandbox Code Playgroud)

gre*_*sel 5

您正在使用自定义 API 密钥的授权标头。这不是它的意图,Apache 将丢弃无效的 Authorization 标头。
我从请求头包中了解到Symfony 2 中缺少授权头?

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

X-Apikey: this_is_my_magic_key_that_put_in_the_header
Run Code Online (Sandbox Code Playgroud)

然后将其检索为

$headers['X-Apikey'];
Run Code Online (Sandbox Code Playgroud)

Apache 不会丢弃它。

注意:标题将在新单词上使用 CamelCased。发送“X-API-KEY”变成“X-Api-Key”所以使用上面的格式就可以正常检索了。