Проблема с CORs до того, как какой-либо код будет выполнен, но только в запросах XHR браузера - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть API, построенный на Cake PHP. Это работает по большей части, но время от времени доступ браузера к API прекращается. Сообщение об ошибке в ответе на запрос XHR выглядит следующим образом:

'Access to XMLHttpRequest at 'http://be:8888/api/pings' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Однако, если я делаю точно такой же запрос через POSTMAN (или если я перехожу непосредственно к URL, а не через XHR), это работает без каких-либо проблем. Я подумал, что это может быть проблема OPTIONS перед полетом, но в заголовках запросов нет списка Request Method, а в журнале доступа Apache это GET-запросы. Нет ничего связанного в журнале ошибок Apache.

Перезапуск MAMP - т.е. Apache - не решает проблему и не очищает локальный кэш DNS. Единственное, что исправляет это, это перезапуск, после которого все снова работает нормально на несколько часов, а потом снова начинает мигать.

Я не могу вспомнить, что вызвало это. Я не думаю, что это настоящая ошибка промежуточного программного обеспечения CORS, потому что перезапуск исправляет это, и API доступен нормально. Кроме того, если я добавлю die во время метода промежуточного программного обеспечения CORS __invoke, он не зашёл слишком далеко (в любом случае сначала нужно попасть в индекс d ie в сети root)

Я получаю эту ошибку, даже если я отключаю приложение, помещая die('here'); в начале файла root index. php файла.

Даже если я удаляю файлы index.php (оба в проект root и web root), чтобы при просмотре URL-адреса отображалась ошибка Apache по умолчанию 404 not found: The requested URL /webroot/index.php was not found on this server, я по-прежнему получаю ошибки CORS при попытке использовать XHR в браузере.

I ' Мы заметили эту проблему только после обновления до Ma c OS X Catalina.

Что может быть причиной этого?

[Update:] Вот доказательство того, что он работает в браузере после перезагрузки системы:

Summary
URL: http://be:8888/api/clients
Status: 200 OK
Source: Network
Address: ::1.8888

Request
GET /api/clients HTTP/1.1
Accept: application/vnd.api+json
Content-Type: application/vnd.api+json
Origin: http://localhost:8080
Accept-Language: en-gb
Access-Control-Allow-Origin: *
Host: be:8888
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15
Referer: http://localhost:8080/
Accept-Encoding: gzip, deflate
Connection: keep-alive

Однако через несколько часов он перестает работать. Если бы это была проблема CORS, я понимаю, что она НИКОГДА не сработает.

1 Ответ

0 голосов
/ 29 февраля 2020

Я не специалист по Apache / PHP, но убедитесь, что вы запрашиваете HTTPS через HTTPS и http через http, другими словами, обе стороны должны быть одинаковыми. Также проверьте заголовок запроса. И добавьте «access-control-origin» в заголовок запроса.

...