AJAX Requests

IncomingRequest::isAJAX() 메소드는 X-Requested-With 헤더를 사용하여 요청이 XHR인지 정상인지를 정의합니다. 그러나 가장 최근의 JavaScript 구현 (예 : fetch)은 더 이상 요청과 함께 이 헤더를 보내지 않으므로 IncomingRequest::isAJAX()의 결과값 안정성이 떨어집니다. 이 헤더가 없으면 요청(Request)은 XHR 여부를 정의할 수 없기 때문입니다.

이 문제를 해결하는 지금까지의 가장 효율적인 방법은 요청 헤더를 수동으로 정의하여 정보를 서버로 전송하도록 하여 요청(Request)이 XHR 임을 식별할 수 있게 하는 것입니다.

Fetch API 및 기타 JavaScript 라이브러리에서 X-Requested-With 헤더를 전송하는 방법은 다음과 같습니다.

Fetch API

fetch(url, {
    method: "get",
    headers: {
        "Content-Type": "application/json",
        "X-Requested-With": "XMLHttpRequest"
    }
});

jQuery

jQuery 공식 문서에 따르면 X-Requested-With 헤더는 모든 $.ajax() 요청의 표준 헤더이기 때문에 이 헤더를 명시적으로 보내지 않아도 됩니다. 명시적으로 헤더를 보내야 할 경우가 있다면 다음과 같이 하십시오.

$.ajax({
    url: "your url",
    headers: {'X-Requested-With': 'XMLHttpRequest'}
});

VueJS

VueJS에서 Axios를 사용한다면 다음 코드를 created 함수에 추가하면 됩니다.

axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

React

axios.get("your url", {headers: {'Content-Type': 'application/json'}});

htmx

ajax-header 확장을 사용합니다.

<body hx-ext="ajax-header">
...
</body>