Сообщение от win32s
|
Есть такой код для определения... запроса
|
Давайте поменяем код на сервере (который запущен, к примеру,
http://localhost:5000/), чтобы он возвращал чистый запрос (т. е. само содержимое запроса перед его обработкой сервером)
Теперь отправим POST-запрос при помощи jQuery (последняя версия на данный момент — 3.4.1)
import("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js").then(async () => {
const data = await $.ajax({
url: "http://localhost:5000/",
method: "POST",
timeout: 0,
headers: {
"Content-Type": "text/plain"
},
// crossDomain: false,
data: "Hi!",
});
console.log(data);
})();
Получим то, что отправляли...
Код:
|
POST / HTTP/1.1
Host: localhost:5000
Connection: keep-alive
Content-Length: 3
Accept: */*
Sec-Fetch-Dest: empty
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36
Content-Type: text/plain
Origin: https://cdpn.io
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,ru;q=0.8,es;q=0.7,et;q=0.6
Hi! |
При внимательном рассмотрении вы увидите, что заголовка
X-Requested-With нет. Он появляется, если указать
crossDomain: false (так захотели разработчики jQuery), но тогда вам нужно, чтобы сервер разрешал такой заголовок (Access-Control-Allow-Headers: X-Requested-With)
Кстати, этот заголовок можно легко вырезать при помощи Service Worker! Также вы можете добавить этот заголовок для всех запросов! Также вы можете сделать запрос на любом другом языке и подставить этот заголовок. Возникает вопрос, для чего нужен этот заголовок?
Сообщение от win32s
|
Распознать... на стороне сервера
|
- Если вы хотите, чтобы в браузере открывался HTML-документ, а при запросе через fetch, XMLHttpRequest сервер возвращал, например, JSON, то используйте заголовок Accept: application/json. В отличие от X-Requested-With, при помощи Accept вы можете работать с различными представлениями данных.
- Если вы хотите, чтобы содержимое было доступно только при запросе через fetch, XMLHttpRequest, потому что вы думаете, что это ограничивает доступ к данным, то вам нужно подумать о настоящей авторизации для доступа к данным. Тогда у вас будет токен, который вы будете отправлять через заголовок, например, Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp... В отличие от X-Requested-With, при помощи Authorization вы можете работать с данными, предназначенными для конкретного пользователя.
- Если вы хотите, чтобы определённые версии данных были доступны пользователям определённой программы или её версии, то вы можете и такое указать, например, заголовок для мобильного приложения MyApp версии 1.22.0 — User-Agent: MyApp/1.22.0
Конечно по отдельности эти заголовки тоже полезны, однако указав Accept, Authorization, User-Agent и возможно другие стандартные заголовки, вы сможете отправить именно те точные данные, которые нужны пользователю!
Никогда не полагайтесь на нестандартный X-Requested-With, всегда используйте стандартные заголовки, которые точно позволяют уточнить, что именно вы хотите получить. Кстати, так называемый вами «аякс запрос» на самом деле является обычным GET- или POST-запросом, который может быть выполнен при помощи любого языка программирования (вне браузерного окружения работа с запросами немного мощней), и вы никак не поймёте на сервере, что это было сделано не при помощи jQuery!
Сообщение от laimas
|
Просто передайте такой заголовок и будет вам счастье.
|
Этот заголовок разве что подходит для отладки, чтобы можно было в Chrome DevTools во вкладке Network отфильтровать запросы... хотя и это походит на натягивание презерватива на глобус! (А что, если несколько источников запросов? Не проще ли указать конкретный адрес и заголовок?)
«Эйджякс», означает «Асинхронный Javascript и XML» — термин, который не очень хорошо описывает, что же на самом деле происходит. «Клиент», «запрос», «сервер», «ответ» — намного лучше и понятней, что именно имеется в виду.
И ещё это ваше «аякс» в «Уарайано́у бяура́якс» звучит совершенно непонятно! Это будет — «Эйджякс», оно конечно не совсем ['eɪ'dʒæks], но намного лучше и понятней, чем «аякс». Ещё веб-слова, которые ты, возможно, уже выучил, но их так не произносят —
https://web-english.glitch.me/
Сообщение от Poznakomlus
|
не стоит отделять запрсы аякс от не аякс ибо в этом нет никакого практического смысла
|
Бинго!