Согласно примерам из здесь:
Если в запросе используются методы, отличные от GET, HEAD или POST. Кроме того, если POST используется для отправки данных запроса с Content-Type, отличным от application/x-www-form-urlencoded, multipart/form-data или text/plain, например. если запрос POST отправляет полезные данные в формате XML на сервер с использованием application/xml или text/xml, то запрос считается предварительно проверенным.
Итак, в следующем примере предварительная проверка выполняется из-за XML Content-Type и пользовательского заголовка X-PINGOTHER
:
var invocation = new XMLHttpRequest();
var url = 'http://bar.other/resources/post-here/';
var body = '<?xml version="1.0"?><person><name>Arun</name></person>';
function callOtherDomain(){
if(invocation)
{
invocation.open('POST', url, true);
invocation.setRequestHeader('X-PINGOTHER', 'pingpong'); //<====
invocation.setRequestHeader('Content-Type', 'application/xml'); //<====
invocation.onreadystatechange = handler;
invocation.send(body);
}
}
Но в так называемом предварительном запросе OPTIONS (ниже) сервер уведомляется только о методе HTTP и пользовательском заголовке. Никто не сообщил серверу о XML Content-Type
.
Логически, если запрос на предварительную проверку отправлен, это подразумевает, что Content-Type не входит в 3 формы, которые не требуют предварительной проверки. Но может быть множество других возможностей. Суть в том, что сервер должен знать, почему отправляется предварительный запрос.
Итак, как сервер может разумно решить, разрешать ли этот запрос с отсутствующей частью головоломки (тип контента)?