как контролировать ответ на предполетный запрос - PullRequest
0 голосов
/ 23 января 2019

Мой браузер отправляет буфер данных на мой сервер. К сожалению, я установил для requestHeader значение xhr.setRequestHeader («Content-type», «application / json») с POST. Это потому, что я использую этот var json = JSON.stringify (myArray) в коде моего браузера для создания буфера json. Так что я довольно сильно застрял, отправляя запрос перед полетом (из-за моего использования application / json). Теперь я получаю сообщение об ошибке в окне расширений:

Access to XMLHttpRequest at 
'https://www.xxxubstantiation.com/xxx_crud/xxxit_backend/register' from 
origin 'chrome-extension://xxxgnodlhfmhghjhbkkkaaammfocdpib' has been 
blocked by CORS policy: Request header field content-type is not allowed by 
Access-Control-Allow-Headers in preflight response.

Итак, я считаю, что мне нужно очистить ответ перед полетом, но я понятия не имею, откуда это исходит. Моя поддержка в Bitnami сказала мне, что я могу поместить следующую строку в файл https.conf:

Набор заголовков Access-Control-Allow-Origin "*"

Но у меня уже есть это, и я не вижу, что я задаю какой-либо тип контента в ответе перед полетом. Где настраивается предполетный ответ и как его удалить или исправить? Есть ли документ о том, как (иначе где) настроить предполётный ответ?

1 Ответ

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

Сервер должен ответить в заголовке следующим образом:

Access-Control-Allow-Headers: content-type
Access-Control-Allow-Method: POST
Access-Control-Allow-Origin: *

И ответ должен быть HTTP 200. Первый заголовок - это тот, который соответствует полученному вами сообщению об ошибке, и должен затемисчезнуть ...

--- РАСШИРЕННЫЙ ОТВЕТ ---

Проверка заголовков ответа ОПЦИИ:

Я полагаю, вам нужно проверить, еслиЗапрос OPTIONS действительно отправляет обратно все необходимые заголовки, чтобы успешно обработать предпечатную проверку.Чтобы увидеть заголовки запроса OPTION, вы можете смоделировать it:

curl  -i \
  -H "Origin: http://your-calling-domain.com/" \
  -H "Access-Control-Request-Method: GET" \
  -H "Access-Control-Request-Headers: X-Requested-With" \
  -X OPTIONS \
  https://the-api-endpoint-you-want-to-call/... \

Вот пример для github api:

curl  -i \
  -H "Origin: http://your-calling-domain.com/" \
  -H "Access-Control-Request-Method: GET" \
  -H "Access-Control-Request-Headers: X-Requested-With" \
  -X OPTIONS \
  https://api.github.com/users/sebhildebrandt/org \

Ваш запрос на OPTIONнеобходимо сопоставить с заголовками RESPONSE ... более конкретно:

  • Access-Control-Request-Method необходимо сопоставить (быть одним из) Access-Control-Allow-Method
  • Access-Control-Request-Headers необходимо сопоставить с (быть одним из) Access-Control-Allow-Headers
  • Origin необходимо сопоставить с Access-Control-Allow-Origin

Только когда все три в порядке, предпечатная проверка успешна и ваш запрос POST будет запущенна сервер.

Включить заголовки CORS на Apache:

В вашем конфигурационном файле (для вашего сайта) или в .htaccess необходимо добавить

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

В этом случае предварительная проверка будет действительна в течение одного дня (86400 секунд)

Затем необходимо убедиться, что заголовки включены на Apache (в системах на основе Linux):

sudo a2enmod headers

Для Windows вам потребуется:

  • открыть httpd.conf в вашем _apache_folder_/conf
  • раскомментировать #LoadModule headers_module modules/mod_headers.so

Перезапустить Apache

sudo service apache2 restart

Это должно сработать ...

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