Предварительный запрос параметров HTTP

опрос

1. В HTTP есть восемь распространенных методов запроса

  1. get: Параметр указан в URL, длина браузера ограничена, и это небезопасно.
  2. пост: параметры не видны, длина не ограничена
  3. put: загрузить последний контент в указанное место
  4. удалить: удалить ресурс, представленный запрошенным URL-адресом
  5. head: не возвращает соответствующее тело, в основном используется клиентом для просмотра производительности сервера
  6. опции:Подобно голове, он используется клиентом для просмотра производительности сервера. Когда объект JavaScript XMLHttpRequest выполняет междоменное совместное использование ресурсов CORS, он использует метод OPTIONS для отправки запроса анализа, чтобы определить, имеет ли он доступ к указанному ресурсу.
  7. connect: зарезервировано для http1.1, измените режим подключения на режим конвейера, обычно используемый для связи между ссылкой зашифрованного сервера SSL и незашифрованным прокси-сервером HTTP.
  8. трассировка: сервер запросов [эхо-полученная информация о запросе] в основном используется для тестирования или диагностики HTTP-запросов.
  9. patch: Появляется позже и используется для обновления локальных ресурсов.Если его нет, будет создан новый (больше используется после http1.1)

Вообще говоря, нам нужно использовать только post и get, но если бэкэнд соответствует спецификации дизайна ResetFul, нам нужно использовать различные семантические методы.

Примечание. Ссылка и отвязка устарели в HTTP 1.1.

2. Что такое предварительный запрос?

Предварительный запрос — это сложный запрос (методы HTTP-запроса, которые могут оказывать побочные эффекты на данные сервера, такие как размещение и удаление, изменят данные сервера, поэтому сначала обратитесь к серверу).
В междоменном запросе браузер спонтанно инициирует предварительный запрос. Браузер дважды запрашивает запрос. Первый параметр запроса — это параметры, позволяющие проверить, может ли фактический запрос быть принят браузером.

3. Зачем это нужно?

Спецификация w3c требует, чтобы для сложных запросов браузер сначала использовал параметры для инициирования предварительного запроса, чтобы узнать, разрешает ли сервер междоменный запрос.

Так почему бы нам не запросить общие параметры? ?
Поскольку большинство из нас использует запросы на получение и публикацию, это простые запросы, а простые запросы не запускают запросы параметров.
Тогда при каких обстоятельствах будет происходить запрос опций? ? ? 👇

4. Что происходит при каких обстоятельствах? (Ниже приведены все сложные запросы)

  1. Метод запроса не получает заголовок
  2. Тип содержимого сообщения не является application/x-www-form-urlencode, multipart/form-data, text/plain.[То есть установите для типа содержимого значение «application/json»]
  3. Запрос задается с настраиваемым полем заголовка: например, бизнес-требования, передать поле и получить его из бэкэнда, вам не нужно передавать его на каждом интерфейсе
例如设置了post请求的content-type:application/json,就会发生预请求

5. Зачем нужно устанавливать contentType: «application/json»

Ajax отправляет сложную структуру данных json, метод обработки сложен, а на стороне сервера сложно парсить, поэтому есть тип application/json (декларация формата данных), да, некоторые серверы тоже меняют его на формат json после получения это, но если запрос изменен на формат json, произойдет предварительный запрос параметров.

если установлено:

  • Представляет строку в формате json, отправленный объект json должен использовать json.stringify для сериализации строки для соответствия
  • Spring необходимо аннотировать с помощью @RequestBody

если не установлено:

  • По умолчанию contentType: будет использоваться «application/json» application/x-www-form-urlencoded.

6. Что нужно настроить?

В CORS запрос предварительной проверки может быть инициирован с использованием метода OPTIONS, и сервер оценивает на основе информации, полученной из запроса предварительной проверки, чтобы определить, может ли фактический запрос быть принят сервером.

1. Указать в сообщении запроса предварительного запроса👇

  • Поле заголовка Access-Control-Request-Method:Сообщите серверу, какой метод HTTP использовать для фактического запроса;
  • Поле заголовка Access-Control-Request-Headers:Сообщает серверу, какие пользовательские поля заголовка передаются в фактическом запросе.

2. При этом серверу или nginx нужно задать тело ответа👇

"Access-Control-Allow-Origin" : * 【跨域】
Access-Control-Allow-Methods:POST,GET,OPTIONS,DELEDET 【所允许的请求方法告知客户端】
Access-Control-Allow-Headers: X-Requested-With, accept, origin, content-type【自定义的请求头】
Access-Control-Allow-Age:3600  
【一段时间内不需要再次预请求,直接用本次结果即可】
"Content-Type", "application/json;charset=utf-8"

eg1

Семь, роль вариантов

Существует два основных способа использования метода запроса OPTIONS:

  1. Получите метод HTTP-запроса, поддерживаемый сервером; этот метод также часто используется хакерами.
  2. Используется для проверки производительности сервера. Например, когда AJAX выполняет предварительную проверку междоменного запроса, необходимо отправить заголовок запроса параметров на ресурс другого доменного имени, чтобы определить, безопасен ли фактически отправленный запрос.

Восемь широко используемых междоменных методов:

Подробные сведения о междоменных методах см. здесь.

  • Междоменный JSONP: динамическое создание тегов скрипта, поддержка только запросов на получение, но лучшая совместимость может поддерживать старые браузеры.
  • Совместное использование ресурсов CORS между источниками: запрос параметров для прослушивания
  • webSockted: полнодуплексная связь
  • img src : не подлежит ограничениям браузера того же происхождения