мы должны закрыть соединение запроса Cors перед полетом при отправке ответа?

Поскольку я знаю, что если запрос cors поставляется с некоторыми дополнительными наборами заголовков, первый сервер должен его обработать.

При использовании CORS сервер должен отправить заголовок Access-Control-Allow-Headers, чтобы разрешить нестандартные заголовки запросов от клиента.

Access-Control-Allow-Headers... — список поддерживаемых заголовков запросов, разделенных запятыми.

например, предположим, что мой запрос перед полетом

OPTIONS /cors HTTP/1.1
Origin: http://api.bob.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: X-Custom-Header
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...

Затем со стороны сервера я отправлю ответ

Access-Control-Allow-Origin: http://api.bob.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-Custom-Header
Content-Type: text/html; charset=utf-8

Мой вопрос: должен ли я закрыть соединение на стороне сервера, пока мы отправляем ответ перед полетом клиенту?

Еще одна вещь, как я могу кэшировать предварительный запрос для всех других отдельных последующих запросов?

Спасибо


person WitVault    schedule 26.05.2016    source источник


Ответы (1)


Вы можете кэшировать запрос OPTIONS, используя

Access-Control-Max-Age

заголовок. Прикрепите его к коллекции заголовков ответа OPTIONS.

Но тем не менее первоначальный запрос OPTIONS со стороны пользовательского агента (браузера) должен быть сделан, вы не можете избежать этого. Но все дальнейшие запросы OPTIONS кешируются и не выдаются на сервер. Нет необходимости закрывать соединение.

Access-Control-Allow-Origin: http://hello-world.example

Максимальный возраст контроля доступа: 3628800

Access-Control-Allow-Methods: PUT

как описано здесь, найдите

могут быть указаны следующие заголовки

чтобы перейти к обозначенному текстовому разделу.

person Legends    schedule 29.05.2016
comment
другие отдельные последующие запросы снова будут запрашивать предварительный запрос с Access-Control-Allow-Headers. - person WitVault; 06.06.2016
comment
Вы не можете кэшировать исходный отдельный запрос заранее, только дальнейшие запросы OPTION отдельного запроса. Дело в браузере. - person Legends; 06.06.2016
comment
Это ответ, другого обходного пути нет :-) - person Legends; 06.06.2016
comment
Итак, если у вас есть 50 конечных точек отдыха, вам придется отправить 100 запросов. - person WitVault; 06.06.2016
comment
Первоначально да, затем делайте только один запрос без второго запроса Option, если вы кэшируете запрос OPTION, как описано выше. - person Legends; 06.06.2016
comment
Я вижу, что у меня нет ВАРИАНТА, кроме кэширования ВАРИАНТА. - person WitVault; 06.06.2016
comment
К сожалению, если у вас много GET-запросов с часто меняющимися значениями параметров запроса, каждый новый GET-запрос приведет к двум запросам. Что я делаю, например, в моем веб-API у меня есть обработчик сообщений, где я проверяю запрос OPTION и немедленно отправляю ответ 200, если все в порядке. - person Legends; 06.06.2016