Неверный запрос HTTP / 1.1 400 между сервером AWS на другой сервер AWS, но HTTP / 1.1 200 между моим локальным сервером и тем же сервером AWS

PHP App1 AWS экземпляры

AWSApp1Live (64-битная версия Amazon Linux 2015.03 v1.4.6 под управлением PHP 5.5)

AWSApp1Test (64-битная версия Amazon Linux 2015.03 v1.3.2 под управлением PHP 5.6)

PHP App2 AWS экземпляры

AWSApp2Live (64-битная версия Amazon Linux 2016.09 v2.3.2 под управлением PHP 5.6)

AWSApp2Test (64-битная версия Amazon Linux 2015.09 v2.0.4 под управлением PHP 5.5)

Локальный экземпляр App1

LocalApp1 (Windows 10 под управлением панели управления XAMPP v3.2.1)


У меня есть два приложения PHP: PHP App1 и PHP App2, которые работают вместе, общаясь друг с другом с помощью внутренних запросов POST. PHP App1 отправляет запрос, используя

$query = http_build_query($data);
$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded' . PHP_EOL .
'Cv-Forwarded-For: ' . $_SERVER["REMOTE_ADDR"] . PHP_EOL,
'content' => $query,
),
'ssl'=>array(
'verify_peer'=>false,
'verify_peer_name'=>false
)
));

$response = @file_get_contents(
$target = $this->api_target.$action,
$use_include_path = false,
$context
);

В PHP App2 запущена служба API RESTful, которая отвечает на запросы, отправленные из PHP App1. Ответ является строкой JSON.


Я загрузил эти PHP-приложения на четыре разных экземпляра AWS, как упоминалось выше. Следующие комбинации запроса / ответа

AWSApp1Live общение с AWSApp2Live

(HTTP/1.1 400 Bad Request)

AWSApp1Test общение с AWSApp2Live

(HTTP/1.1 400 Bad Request)

AWSApp1Test общение с AWSApp2Test

(HTTP/1.1 200 OK)

LocalApp1 общение с AWSApp2Live

(HTTP/1.1 200 OK)

Итак, как вы можете видеть, PHP App2 при загрузке на AWSApp2Test и отправил запрос от AWSApp1Test, он отвечает (HTTP / 1.1 200 OK). Но при загрузке на AWSApp2Live и дали тот же запрос от любого AWSApp1Live или же AWSApp1Test он отвечает (HTTP / 1.1 400 Bad Request). Единственный раз AWSApp2Live отвечает (HTTP / 1.1 200 OK), когда запрос был отправлен с LocalApp1.


  1. Мы подумали, что это может быть связано с настройкой сжатия вывода Zlib на AWSApp2Live Конфигурация программного обеспечения, но ответ остался прежним.

  2. Мы сделали nslookup из LocalApp1 сервер и AWSApp2Test сервер для AWSApp2Live сервер и оба вернули одинаковые IP-адреса, чтобы исключить любые проблемы DNS

  3. Мы в SSH AWSApp1Test сервер и сделал Wget для одной из команд API на AWSApp2Live сервер, и мы получили ответ JSON, который означал, что он достигает приложения PHP на этом сервере.

  4. Нет журналов, генерируемых на AwsApp2Live сервер для меня, чтобы понять, почему сервер обрабатывает некоторые запросы как плохие запросы, а другие нет.

  5. Используя Почтальон (https://www.getpostman.com/) Мне удалось успешно общаться с API на AWSApp2Live поэтому приложение работает, как и ожидалось.


Мы не уверены, где искать дальнейшие подсказки относительно того, что могло бы случиться. Если вам нужна дополнительная информация, пожалуйста, сообщите нам. Огромное спасибо.

0

Решение

Там нет ничего в документация, но я думаю, что заголовки должны передаваться как строка, только если есть один из них. В противном случае используйте массив:

$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => array(
'Content-Type: application/x-www-form-urlencoded',
'Cv-Forwarded-For: ' . $_SERVER["REMOTE_ADDR"]
),
'content' => $query,
),
'ssl'=>array(
'verify_peer'=>false,
'verify_peer_name'=>false
)
));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]