Показать сообщение отдельно
  #7 (permalink)  
Старый 17.02.2020, 15:17
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от 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 отфильтровать запросы... хотя и это походит на натягивание презерватива на глобус! (А что, если несколько источников запросов? Не проще ли указать конкретный адрес и заголовок?)

Сообщение от win32s
аякс
«Эйджякс», означает «Асинхронный Javascript и XML» — термин, который не очень хорошо описывает, что же на самом деле происходит. «Клиент», «запрос», «сервер», «ответ» — намного лучше и понятней, что именно имеется в виду.

И ещё это ваше «аякс» в «Уарайано́у бяура́якс» звучит совершенно непонятно! Это будет — «Эйджякс», оно конечно не совсем ['eɪ'dʒæks], но намного лучше и понятней, чем «аякс». Ещё веб-слова, которые ты, возможно, уже выучил, но их так не произносят — https://web-english.glitch.me/

Сообщение от Poznakomlus
не стоит отделять запрсы аякс от не аякс ибо в этом нет никакого практического смысла
Бинго!

Последний раз редактировалось Malleys, 17.02.2020 в 15:19.
Ответить с цитированием