programing

새 가져오기 표준에 의해 시작된 요청을 탐지하려면 어떻게 해야 합니까?일반적으로 어떻게 AJAX 요청을 감지해야 합니까?

muds 2023. 9. 28. 08:50
반응형

새 가져오기 표준에 의해 시작된 요청을 탐지하려면 어떻게 해야 합니까?일반적으로 어떻게 AJAX 요청을 감지해야 합니까?

서버에서는 수신 요청이 AJAX임을 아는 것이 유용할 수 있습니다.

대부분의 js 라이브러리는XMLHttpRequest그래서 제공합니다.HTTP_X_REQUESTED_WITH: XMLHttpRequest, 그러나 Chrome의 구현이나 Github의 새로운 폴리필 모두 비슷한 헤더를 사용하지 않습니다.그렇다면 요청이 AJAX임을 어떻게 감지할 수 있습니까?

개시자를 식별하는 요청이 다음에 대한 표준을 통해 시행되지 않는 이유는 무엇입니까?fetch그리고.XMLHttpRequest? 의사결정을 위해 다른 무언가를 사용해야 합니까(예: 고객이 응답하여 기대하는 콘텐츠 유형을 제공하는 것)?

Github의 폴리필 저장소, 특히 이 코멘트에서 이 문제를 확인해보세요.

그 이후로X-Requested-With헤더는 표준이 아니며 일부 누락된 동작을 제공하는 래퍼를 사용하고 있습니다.

자세한 안내가 필요한 경우 포장지 코드의 다음 줄을 확인합니다.

function headers(options) {
  options = options || {}
  options.headers = options.headers || {}
  options.headers['X-Requested-With'] = 'XMLHttpRequest'
  return options
}

이니시에이터를 식별하는 요청이 표준을 통해 적용되지 않는 이유

상관없으니까요.

HTTP 클라이언트는 원하는 것을 요구합니다.서버가 그들에게 줘야 합니다.

고객의 성향에 따라 고객에게 다른 무언가를 제공하는 것은 해결하는 것보다 더 많은 문제를 야기하는 경향이 있습니다.사용자 에이전트 스니핑이 대표적인 예입니다.

의사결정을 위해 다른 무언가를 사용해야 합니까(예: 고객이 응답하여 기대하는 콘텐츠 유형을 제공하는 것)?

네.

Accept헤더는 HTTP 리소스를 여러 형식으로 사용할 수 있을 때 클라이언트가 선호하는 형식을 지정할 수 있도록 특별히 제공됩니다.

새로운 대답은 대부분의 브라우저가 이제Sec-Fetch-Mode헤더에는 다음과 같은 옵션이 있습니다.

  • Sec-Fetch-Mode: cors
  • Sec-Fetch-Mode: navigate
  • Sec-Fetch-Mode: no-cors
  • Sec-Fetch-Mode: same-origin
  • Sec-Fetch-Mode: websocket

사용 사례에 따라 ajax는 다음과 같은 요청이 있습니다.navigate, 또는 그 외의navigate아니면websocket. 이 조건이 존재하는 경우 이 조건을 사용할 수 있으며 다음으로 폴백합니다.X_REQUESTED_WITH그렇지않으면.아니면 어떤 상황에서는Sec-Fetch-Mode다른 경우에 대한 기본값을 가질 수 있는 충분한 상황에 대한 자신감을 줄 수 있습니다.

확인 방법 — 백엔드의 머리글(예: express.js):

headers['sec-fetch-mode'] == 'navigate'

출처 : MDN

HTTP_X_REQUESTED_를 설정하는 구체적인 예는 다음과 같습니다.머리글 포함:

fetch("/url", {
  method: "POST",
  headers: {
    "X-Requested-With": "XMLHttpRequest",
  },
});

언급URL : https://stackoverflow.com/questions/33662318/how-do-i-detect-requests-initiated-by-the-new-fetch-standard-how-should-i-detec

반응형