Почему CORS работает в некоторых местах, но не в других? - PullRequest
0 голосов
/ 28 октября 2019

В моем приложении Laravel я настроил маршрут перехвата всех сообщений для обработки предварительных запросов CORS.

Route::options('/{any}', 'v1\ApiController@handleCors')->where('any', '.*');

Это относится к функции, которая делает это:

return response()
            ->json($data, $this->statusCode)
            ->header('Accept', '*/*')
            ->header('Access-Control-Request-Headers', 'Content-Type, Authorization')
            ->header('Access-Control-Allow-Origin', 'https://frontend.myapp.com')
            ->header('Access-Control-Allow-Methods', 'GET, POST, DELETE, PUT, OPTIONS');

Сейчаскогда я вызываю маршрут с запросом OPTIONS, я возвращаю все заголовки. Затем я запустил следующую команду в Терминале:

curl -i -X OPTIONS -H "Origin: https://frontend.myapp.com" \
-H 'Access-Control-Request-Method: POST' \
-H 'Access-Control-Request-Headers: Content-Type, Authorization' \
"https://api.myapp.com/testingcors"

Я получаю следующий ответ:

HTTP/1.1 403 Forbidden
Server: nginx
Date: Mon, 28 Oct 2019 15:29:48 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.3.10
Cache-Control: no-cache, private

Origin not allowed%

И когда я позволяю фактическому веб-интерфейсу общаться с API, он выдает то же самоеошибка. Что я тут не так делаю?

1 Ответ

0 голосов
/ 29 октября 2019

Я считаю, что заголовки CORS обычно применяются к экземпляру приложения, а не к ответу.

// set the CORS headers in your app
header('Access-Control-Request-Headers', 'X-Requested-With,content-type');
header('Access-Control-Allow-Origin', 'https://frontend.myapp.com');
header('Access-Control-Allow-Methods', 'GET, POST, DELETE, PUT, OPTIONS');

// return a response normally
return response()->json($data, $this->statusCode);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...