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

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

ex 1.

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

ex2.

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({})
})

ex 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" работает нормально.Пример здесь , однако, показывает, что оба указаны в запросе, и предполагает, что это не должно вызывать предварительную проверку.Это просто проблема с различными реализациями браузера или я что-то упустил?

1 Ответ

1 голос
/ 28 июня 2019

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

Предупреждение. Это преднамеренно не использует извлечение MIME-типа, поскольку этот алгоритм довольно простителен, и серверы не должны его реализовывать.

Если используется извлечение типа MIME, следующий запрос не приведет к предварительному просмотру CORS, и наивный анализатор на сервере может обработать тело запроса как JSON

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

Справка:

...