Предполетный канал CORS не удался. Только в Firefox. Хром отлично работает

Так что у меня есть необычная проблема, что я не знаю, как делать отладку. У меня есть угловое 4 приложение, которое использует cakephp на стороне сервера.

В моем приложении у меня есть несколько разных экранов, к которым я могу получить доступ нормально, кроме одного, и это единственная проблема с Firefox. Я могу открыть это нормально, если я использую хром. Я получаю следующее предупреждение в Firefox

Запрещен перекрестный запрос: одна и та же политика происхождения запрещает чтение
удаленный ресурс на
HTTP: // локальный: 8080 / API / кросс-серии / сети серии. (Причина: CORS
предполетный канал не удался).

Эту ссылку я использую для перехода на экран

<div class = "col-xs-4 col-sm-4 col-md-4 col-lg-4"  [routerLink]="['/dashboards/cross-series/network',{networkId:3}]">

<img src = "assets/img/networks/com-circle.png" class = "cross-series-navigation-icon clickable"alt = "Com"/>

</div>

Затем на PHP у меня есть следующий код для Cors

        $this->response->header('Access-Control-Allow-Origin', 'http://localhost:4200');
//  $this->response->header('Access-Control-Allow-Origin', 'http://localhost:8066');
$this->response->header('Access-Control-Allow-Credentials', 'true');
$this->response->header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, DELETE');
$this->response->header('Access-Control-Allow-Headers', 'Origin, Authorization, X-Requested-With, Content-Type, Accept, Cache-Control');

header_remove('X-Powered-By'); //remove default PHP header

array_push($this->allowedActions, 'options');


CakeLog::debug("This is the action: " . print_r($this->action, true), 'debug');

В журнале я вижу, что выходные данные для Firefox и Chrome отличаются. В ФФ я получаю следующее

2018-06-10 22:33:48 Отладка: это действие: параметры

В Chrome его нет

2018-06-10 22:41:44 Отладка: это действие: getNetworkSeries

Это началось только после того, как я перешел с угловой 2 на угловую 5. Я не уверен, имеет ли это какое-либо отношение к этому, но в моем старом env все работает нормально, но я не могу заставить его работать сейчас с firefox. Любые идеи о том, как я начинаю отлаживать что-то вроде этого?

Обновить:

Я попытался изменить URL-адрес запроса, чтобы использовать IP-адрес вместо имени сервера, и это не имело значения.

Обновить:

Я могу видеть в моих журналах php, что есть ошибка, пытаясь маршрутизировать к правильному контроллеру

018-06-11 10:20:32 Ошибка: контроллер [MissingControllerException] Класс Cross-seriesController не найден. Атрибуты исключения:
массив (‘class’ => ‘Cross-seriesController’, ‘plugin’ => NULL,)
URL запроса: / api / cross-series / network-series Отслеживание стека:

Я не могу понять, откуда он получает Cross-seriesController, так как URL:

/ API / кросс-серия / сеть серия

и маршрут для этого

 Router::connect('/cross-series/network-series',
array(
'controller' => 'Series',
'action' => 'getNetworkSeries',
'[method]' => 'POST',
'ext' => 'json',
) );

Это заголовки HTTP-запроса

Host: localhost:8080 User-Agent: Mozilla/5.0 (X11; Linux x86_64;

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Origin: http://localhost:4200
Connection: keep-alive Pragma: no-cache Cache-Control: no-cache

0

Решение

Нашел решение. Firefox использовал опции для проверки заголовков перед полетом.

Я добавил код в моем PHP для обработки ответа

if($this->request->is("options")){

$this->response->header('Access-Control-Allow-Origin','http://localhost:4200');
$this->response->header('Access-Control-Allow-Methods','*');
$this->response->header('Access-Control-Allow-Credentials', 'true');

$this->response->header('Access-Control-Allow-Headers','Content-Type, Authorization');

$this->response->send();

$this->_stop();
}
0

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

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