что такое запрос опций
Мы можем посмотреть описание в MDN:
Метод OPTIONS HTTP используется для получения параметров связи, поддерживаемых целевым ресурсом. Клиенты могут использовать метод OPTIONS для определенного URL-адреса или для всего сайта (установив для URL-адреса значение «*»).
Проще говоря, вы можете использовать запрос параметров, чтобы узнать, какой метод запроса поддерживает запрос на соответствующем сервере.
Во внешнем интерфейсе мы обычно не инициируем этот запрос активно, но часто можно увидеть, что один и тот же запрос инициируется дважды в браузере, как показано на рисунке:
![Github](https://s3.timeweb.com/newworld58-e1e8f297-7d39-4eff-9f5d-42281e40a914/UnderSkyWeb-bede912ae48f5e5b34cd892fa08c81b78bc6d7d1e70813898e0e1aac2640320e4bfeec49.jpg)
На самом деле это потому, что в случае междоменного он активно инициируется, когда браузер инициирует «сложный запрос». Стандартная спецификация междоменного общего доступа требует, чтобы для тех методов HTTP-запросов, которые могут иметь побочные эффекты для данных сервера (особенно HTTP-запросы, отличные от GET, или POST-запросы с определенными типами MIME), браузер должен сначала использовать метод OPTIONS для инициации предварительный запрос (preflight request), чтобы узнать, разрешает ли сервер междоменный запрос. После того, как сервер подтвердит разрешение, инициируется фактический HTTP-запрос.
Простые и сложные запросы
Некоторые запросы не запускают предварительные запросы CORS, такие запросы обычно называются «простыми запросами», а запросы, запускающие предварительную проверку, называются «сложными запросами».
простой запрос
- Метод запроса
GET、HEAD、POST
просьба время от времени - Поля заголовков в наборе спецификаций заданы искусственно, например
Accept/Accept-Language/Content-Language/Content-Type/DPR/Downlink/Save-Data/Viewport-Width/Width
-
Content-Type
Значение ограничено одним из следующих, то естьapplication/x-www-form-urlencoded、multipart/form-data、text/plain
- Ни один из объектов XMLHttpRequestUpload в запросе не зарегистрировал ни одного прослушивателя событий;
- В запросе не использовался объект ReadableStream.
сложный запрос
- Был использован один из следующих HTTP-методов: PUT/DELETE/CONNECT/OPTIONS/TRACE/PATCH.
- Поля заголовков за пределами следующих наборов заданы искусственно, то есть поля за пределами простого запроса
- Значение Content-Type не является одним из следующих, т.е.
application/x-www-form-urlencoded、multipart/form-data、text/plain
Параметры Поля заголовка запроса ключей
Ключевые поля заголовка запроса
ключевое поле | эффект |
---|---|
Access-Control-Request-Method | Сообщите серверу, что фактический запрос будет использовать метод POST. |
Access-Control-Request-Headers | Сообщите серверу настраиваемые поля заголовка запроса, которые будет нести фактический запрос. |
Такие как:
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
Ключевые поля заголовка ответа
ключевое поле | эффект |
---|---|
Access-Control-Allow-Methods | Указывает, какой метод сервер позволяет клиенту использовать для инициирования запроса. |
Access-Control-Allow-Origin | Доменные имена, которые разрешают междоменные запросы, установите *, если вы хотите разрешить все домены. |
Access-Control-Allow-Headers | Сообщите серверу поля заголовка, содержащиеся в фактическом запросе. |
Access-Control-Max-Age | Указывает, как долго результаты предварительных запросов могут кэшироваться. |
Оптимизация запроса на опции
Когда мы инициируем междоменный запрос, если это простой запрос, мы выдаем только один запрос, но если это сложный запрос, мы сначала выдаем запрос параметров, чтобы подтвердить, поддерживает ли целевой ресурс междоменный доступ, и тогда браузер будет отвечать в соответствии с сервером Заголовок автоматически обрабатывает оставшиеся запросы.Если ответ поддерживает междоменные, он будет продолжать делать обычные запросы.Если не поддерживается, то будет отображать ошибку в консоли.
Видно, что при срабатывании предварительной проверки междоменный запрос отправит 2 запроса, что не только увеличивает количество запросов, но и задерживает время фактической инициации запроса, что серьезно влияет на производительность.
Поэтому мы можем оптимизировать запрос Options двумя основными способами.
- Преобразование в простые запросы, например использование JSONP для междоменных запросов.
- Запросы опций кеша, настройки на стороне сервера
Access-Control-Max-Age
поле, затем, когда URL-адрес запрашивается в первый раз, будет выдан запрос OPTIONS, и браузер кэширует результат ответа на запрошенный предварительный запрос OPTIONS в соответствии с возвращенным полем Access-Control-Max-Age (конкретный кэш время также зависит от браузера.Максимальное поддерживаемое значение по умолчанию, возьмите минимальное значение из двух, обычно 10 минут). В течение срока действия кеша запросы к этому ресурсу (с тем же URL-адресом и полями заголовка) больше не будут запускать предварительную проверку. (Когда хром открывает консоль, вы можете видеть, что когда сервер отвечает на Access-Control-Max-Age, только первый запрос будет иметь предварительную проверку, но не позже. Обратите внимание, что для включения кеша удалите отключить кеш чек об оплате.)
Суммировать
Запрос параметров — это предварительный запрос, который можно использовать для обнаружения методов http, разрешенных сервером. Когда из соображений безопасности инициируется междоменный запрос, при срабатывании определенных условий браузер автоматически инициирует запрос OPTIONS перед формальным запросом, то есть предварительный запрос CORS. Если сервер принимает междоменный запрос , браузер продолжит инициировать формальный запрос.
использованная литература
наконец
- Добро пожаловать, чтобы добавить меня в WeChat (winty230), привлечь вас в техническую группу, долгосрочный обмен и обучение...
- Добро пожаловать, чтобы обратить внимание на «Front-end Q», серьезно изучить интерфейс и стать профессиональным техником...
![GitHub](https://s3.timeweb.com/newworld58-e1e8f297-7d39-4eff-9f5d-42281e40a914/UnderSkyWeb-1f648ee26238a1085884771f7f46860dc382bdf6b630ca88d7b75f852efa714125a24f94.png)