Заголовок 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
    // ...
}
Author: TheInvisibleFist, 2015-02-03

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-ключом", поэтому используйте приведенный выше формат, чтобы получить его правильно.

 3
Author: greg_diesel, 2017-05-23 11:53:10

Вы не опубликовали код для получения заголовка "Авторизация"

Я бы рекомендовал посмотреть переменные СЕРВЕРА в вашем получающем PHP-скрипте.

$myauthorization=$_SERVER['HTTP_Authorization'];

Это то, что не работает. Проверьте, что доступно

print_r($_SERVER);
 0
Author: greg_diesel, 2015-02-02 22:21:13

Авторизация является частью RFC 2617 - Аутентификация по протоколу HTTP и его нельзя использовать. Просто переименуйте его в другое имя, и он будет работать нормально.

 0
Author: lynx_74, 2018-07-30 20:55:38