Как указать `application/json` Content-Type, не вызывая предварительный запрос Chrome CORS?

Согласно спецификациям выборки, похоже, что если указан Content-Type, который является одним из «application/x-www-form-urlencoded», «multipart/form-data» или «text/plain», и другие условия удовлетворены. тогда запрос POST не должен приводить к предварительному запросу. Однако на практике мне было трудно указать несколько заголовков для выборки таким образом, чтобы это не вызывало запрос OPTIONS для предварительной проверки.

экс 1.

fetch("https://differentsubodmain.example.com/api/resource", {
    headers: {
        "Content-Type": "text/plain, application/json",
        Accept: "application/json"
    },
    method: "POST",
    body: JSON.stringify({})
})

экс 2.

var myHeaders = new Headers();
myHeaders.append('Accept', 'application/json');
myHeaders.append('Content-Type', 'text/plain');
myHeaders.append('Content-Type', 'application/json');

fetch("https://differentsubodmain.example.com/api/resource", {
    headers: myHeaders,
    method: "POST",
    body: JSON.stringify({})
})

экс 3.

fetch("https://differentsubodmain.example.com/api/resource", {
    headers: [
        ["Content-Type", "application/json"],
        ["Content-Type", "text/plain"],
        ["Accept", "application/json"]
    ],
    method: "POST",
    body: JSON.stringify({})
    })

Ни в одном из этих примеров не удается выполнить запрос без предварительного запроса, но указание любого из них только с "Content-Type": "text/plain", похоже, работает нормально. Однако пример здесь показывает, что оба они указаны в запросе, и предполагает, что это не должно вызывать предварительную проверку. Это просто проблема с разными реализациями браузера или я что-то упустил?

Имеет ли значение, что ваши заголовки являются объектом, а не массивом массивов, как в примере? Спецификации говорят, что это список, а не объект.

Train 28.06.2019 21:21

Оба способа работают в целом, однако ни один из них, похоже, не дает нам свободы действий в отношении требования предварительной проверки CORS.

jpierson 28.06.2019 21:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
1 305
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, я не внимательно прочитал эту ссылку. Ниже приведен важный отрывок.

Warning. This intentionally does not use extract a MIME type as that algorithm is rather forgiving and servers are not expected to implement it.

If extract a MIME type were used the following request would not result in a CORS preflight and a naïve parser on the server might treat the request body as JSON

Похоже, мы в значительной степени ограничены типами пантомимы application/x-www-form-urlencoded, multipart/form-data или text/plain, чтобы избежать предварительных запросов для CORS.

Ссылка:

Другие вопросы по теме