Заголовок HTTP-запроса распознается локальным сервером, но не сетевым сервером
Я создал простое PHP-приложение, которое предоставляет RESTful API для регистрации, входа в систему и обновления геолокации пользователя. Я протестировал его с базой данных MySQL на локальном сервере Apache, и все было в порядке.
Недавно я перенес 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-код таким образом, чтобы он считывал api-ключ в заголовке Авторизация . Это отлично работал на моем локальном сервере, но сообщил об отсутствии api-ключа , когда тот же код был перенесен на HostGator
Я подозреваю, что в моей локальной среде могут быть определенные настройки по умолчанию, но их необходимо явно задать в HostGator. Вот мой текущий.htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ %{ENV:BASE}index.php [QSA,L]
AddType application/x-httpd-php54 .php
Я использую XAMPP для локального сервера и базы данных, а также расширение Chrome Расширенный клиент Rest для отправки HTTP-запросов.
Изменить: Мой код для извлечения значение заголовка:
$headers = apache_request_headers();
if (isset($headers['Authorization'])) {
$api_key = $headers['Authorization'];
// validating api key
// ...
} else {
// api key is missing in header
// ...
}
3 answers
Вы используете заголовок авторизации для пользовательского ключа API. Это не входит в его намерения, и Apache отбросит недопустимые заголовки авторизации.
Я узнал, что из Заголовков запросов в сумке отсутствует заголовок авторизации в Symfony 2?
Итак, что вам нужно сделать, это использовать реальный пользовательский заголовок. Вместо использования поля авторизации отправьте свой ключ как
X-Apikey: this_is_my_magic_key_that_put_in_the_header
Затем извлеките его как
$headers['X-Apikey'];
Apache не откажется от этого.
Примечание: заголовки будут написаны на новых словах. Отправка "X-API-КЛЮЧА" становится "X-Api-ключом", поэтому используйте приведенный выше формат, чтобы получить его правильно.
Вы не опубликовали код для получения заголовка "Авторизация"
Я бы рекомендовал посмотреть переменные СЕРВЕРА в вашем получающем PHP-скрипте.
$myauthorization=$_SERVER['HTTP_Authorization'];
Это то, что не работает. Проверьте, что доступно
print_r($_SERVER);
Авторизация является частью RFC 2617 - Аутентификация по протоколу HTTP и его нельзя использовать. Просто переименуйте его в другое имя, и он будет работать нормально.