почему происходит предполетный запрос? - PullRequest
0 голосов
/ 23 января 2019

Мое расширение chrome иногда работает нормально, если у меня открыто другое приложение (в котором не используется CORS). Но иногда расширение браузера отправляет запрос перед полетом, и тогда мой код не работает.

Вот заголовок запроса в случае, когда, к сожалению, отправляется предпечатная проверка:

OPTIONS /sub_crud/Subit_backend/register HTTP/1.1
Host: www.xxxxubstantiation.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: POST
Origin: chrome-extension://xxxxlhfmhghjhbkkkaaammfocdpib
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Access-Control-Request-Headers: content-type,x-requested-with
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

Я получаю ошибку:

"заблокировано политикой CORS: поле заголовка запроса Access-Control-Allow-Headers в x-запрашиваемый-с не допускается в предполетный ответ. "

Но я не хочу отправлять предварительную проверку и не знаю, почему иногда отправляется предварительная проверка. Мне интересно, если проблема как-то связана с Prellighted запросами и перенаправлениями? также, вот код, который устанавливает запрос:

    xhr.open('POST', url, true);
//  xhr.setRequestHeader("Content-type", 'text/plain');
    xhr.setRequestHeader("Content-type", 'application/json');
    xhr.setRequestHeader("X-Requested-With",'xmlhttprequest');
//  xhr.setRequestHeader("Access-Control-Allow-Origin", '*');

Я пытался использовать text / plain в качестве типа контента, но это не сработало. Я также прокомментировал access-control-allow-origin, но это не сработало.

Есть идеи, как остановить предполетный полет? или если я не могу остановить предполёт, как настроить Apache для ответа на него?

Дополнительная информация ******************* 1) и код js браузера, и код сервера (CI) - мои. 2) Я действительно даже не хотел предполетного запроса. Поскольку я отправляю type = application / json, браузер решил сделать это OPTION. 3) Моя функция PHP не срабатывает. У меня тоже есть отладчик. 4) Я изменил httpd.conf на сервере, чтобы он включал:

  Header set Access-Control-Allow-Origin "*"
  Header set Access-Control-Allow-Headers "Accept,Authorization,Content-Type,Origin"
  Header set Access-Control-Allow-Methods "GET, POST, PATCH, PUT, DELETE"
  Header set Access-Control-Max-Age: 86400

5) код, расширение браузера и сервер работали в прошлом.

1 Ответ

0 голосов
/ 23 января 2019

В CORS отправляется предварительный запрос с методом OPTIONS, чтобы сервер мог ответить на вопрос, приемлемо ли отправить запрос с этими параметрами.

См. эту ссылку для получения дополнительной информации о options http методе.

Таким образом, проблема в том, что ваш сервер не разрешил CORS для заголовка x-requested-with.

xhr.setRequestHeader("X-Requested-With",'xmlhttprequest'); // here is the issue

Теперь вы можете либо прокомментировать эту строку, либо, если требуется, разрешить этот заголовок на вашем сервере.

Для настройки на сервере вы можете использовать .htaccess file

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...