我制作了一个简单的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”,因此请使用上面的格式来正确检索它.