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