HTTP请求标头由本地服务器识别,但不是在线服务器

时间:2015-02-02 22:12:15

标签: php apache .htaccess rest hosting

我制作了一个简单的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-key missing

我怀疑某些设置在我的本地环境中是默认设置,但需要在 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
    // ...
}

3 个答案:

答案 0 :(得分:3)

您正在使用自定义API密钥的授权标头。这不是它的意图,Apache将丢弃无效的授权标头 我是从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”因此使用上述格式可以正确检索它。

答案 1 :(得分:0)

您没有发布有关如何检索“授权”标题的代码

我建议您查看接收PHP脚本中的SERVER变量。

$myauthorization=$_SERVER['HTTP_Authorization'];

这不起作用。看看有什么可用

print_r($_SERVER);

答案 2 :(得分:0)

授权 RFC 2617-HTTP身份验证 的一部分,不能使用。只需将其重命名为另一个名称,它就可以正常工作。

相关问题