js 또는 jQuery를 사용하여 Ajax 요청에 사용자 정의 HTTP 헤더를 추가하려면 어떻게해야합니까?


답변:


585

필요한 것에 따라 몇 가지 솔루션이 있습니다 ...

당신이 원하는 경우 개별 요청에 사용자 정의 헤더 (또는 헤더 세트)를 추가 한 후 바로 추가 headers속성을 :

// Request with custom header
$.ajax({
    url: 'foo/bar',
    headers: { 'x-my-custom-header': 'some value' }
});

모든 요청에 ​​기본 헤더 (또는 헤더 세트)추가 하려면 다음을 사용하십시오 $.ajaxSetup().

$.ajaxSetup({
    headers: { 'x-my-custom-header': 'some value' }
});

// Sends your custom header
$.ajax({ url: 'foo/bar' });

// Overwrites the default header with a new header
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } });

모든 요청에 ​​헤더 (또는 헤더 세트)추가 하려면 다음 beforeSend과 함께 후크 를 사용하십시오 $.ajaxSetup().

$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('x-my-custom-header', 'some value');
    }
});

// Sends your custom header
$.ajax({ url: 'foo/bar' });

// Sends both custom headers
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } });

편집 (추가 정보) : 알아야 할 한 가지는 ajaxSetup기본 헤더 세트를 하나만 정의 할 수 있고 하나만 정의 할 수 있다는 것 beforeSend입니다. ajaxSetup여러 번 호출 하면 마지막 헤더 세트 만 전송되고 마지막 전송 전 콜백 만 실행됩니다.


나는 새로운 정의하면 어떤 일이 발생 beforeSend을 할 때 $.ajax?
코스타스

3
beforeSend콜백 은 하나만 정의 할 수 있습니다 . $.ajaxSetup({ beforeSend: func... })두 번 전화 하면 두 번째 콜백이 유일한 콜백입니다.
Prestaul

1
에 대한 자세한 내용을 추가하기 위해 답변을 업데이트했습니다 ajaxSetup.
Prestaul

2
CORS Request (모든 브라우저)에서 작동하지 않는 것 같습니다. 해결 방법이 있습니까?
svassr

1
@ Si8, 그것은 교차 도메인 문제처럼 보입니다. 한 도메인에서 다른 도메인으로 요청할 수 없습니다. CORS를 살펴보고 도움이되는지 확인하십시오.
Prestaul

54

또는 향후 모든 요청에 ​​대해 사용자 지정 헤더를 보내려면 다음을 사용할 수 있습니다.

$.ajaxSetup({
    headers: { "CustomHeader": "myValue" }
});

이렇게하면 요청 옵션에 의해 명시 적으로 재정의되지 않는 한 모든 향후 ajax 요청에 사용자 정의 헤더가 포함됩니다. 여기에서 더 많은 정보를 찾을 수 있습니다ajaxSetup


1
내가 실제로 이것을 달성하고 싶을 때, 이것은 실제로 작동하지 않는 것 같습니다.
Trip

1
실제로 실제 ajax 호출 전에 ajaxSetup을 호출해야합니다. 나는 이것이 작동하지 않는 다른 이유를 모른다 :)
Szilard Muzsi

20

JQuery ajax를 가정하면 다음과 같은 사용자 정의 헤더를 추가 할 수 있습니다-

$.ajax({
  url: url,
  beforeSend: function(xhr) {
    xhr.setRequestHeader("custom_header", "value");
  },
  success: function(data) {
  }
});

19

XHR2를 사용한 예는 다음과 같습니다.

function xhrToSend(){
    // Attempt to creat the XHR2 object
    var xhr;
    try{
        xhr = new XMLHttpRequest();
    }catch (e){
        try{
            xhr = new XDomainRequest();
        } catch (e){
            try{
                xhr = new ActiveXObject('Msxml2.XMLHTTP');
            }catch (e){
                try{
                    xhr = new ActiveXObject('Microsoft.XMLHTTP');
                }catch (e){
                    statusField('\nYour browser is not' + 
                        ' compatible with XHR2');                           
                }
            }
        }
    }
    xhr.open('POST', 'startStopResume.aspx', true);
    xhr.setRequestHeader("chunk", numberOfBLObsSent + 1);
    xhr.onreadystatechange = function (e) {
        if (xhr.readyState == 4 && xhr.status == 200) {
            receivedChunks++;
        }
    };
    xhr.send(chunk);
    numberOfBLObsSent++;
}; 

희망이 도움이됩니다.

객체를 만들면 setRequestHeader 함수를 사용하여 요청을 보내기 전에 이름과 값을 할당 할 수 있습니다.


2
2011 년에는 이것이 맞았지만 휠을 재발 명하지 않고 대신 Zepto 또는 jQuery와 같은 AJAX 라이브러리를 사용하는 것이 좋습니다.
Dan Dascalescu

4
기존 XHR2 호출에 헤더를 추가하려고하지 않고 jQuery를 사용하기 위해 헤더를 모두 다시 작성하지 않으려는 경우 ... gryzzly는 유일하게 실용적인 대답을합니다.
roryhewitt

@AliGajani 문제는 THREE.js와 같은 특정 응용 프로그램이나 라이브러리 $.ajax*가 jQuery에 의존하지 않고 대신 XHR을 사용하는 함수를 사용 하지 않기 때문에 이것이 유일한 옵션입니다.
Coburn

1
@AliGajani 또한 네트워크로드 시간뿐만 아니라 라이브러리의 구문 분석 시간이기도합니다. 또한 어떤 의존성에주의를 기울이지 않으면 너무 많은 의존성을 가진 프로젝트를 빠르게 얻을 수 있습니다
Oztaco-Reinstate Monica C.

19

jQuery를 사용하지 않고이 작업을 수행 할 수도 있습니다. XMLHttpRequest의 send 메소드를 재정의하고 거기에 헤더를 추가하십시오.

XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
var newSend = function(vData) {
    this.setRequestHeader('x-my-custom-header', 'some value');
    this.realSend(vData);
};
XMLHttpRequest.prototype.send = newSend;

12

문서에$.ajaxSetup() 설명 된대로 사용하지 않아야합니다 . 대신 다음을 사용하십시오.

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
    jqXHR.setRequestHeader('my-custom-header', 'my-value');
});

6

"Ajax를 사용할 때"와 "HTTP 요청 헤더" 를 의미한다고 가정 headers하면 전달한 객체 의 속성 을 사용하십시오.ajax()

헤더 (1.5 추가)

기본: {}

요청과 함께 보낼 추가 헤더 키 / 값 쌍의 맵입니다. 이 설정은 beforeSend 함수가 호출되기 전에 설정됩니다. 따라서 머리글 설정의 모든 값을 beforeSend 함수 내에서 덮어 쓸 수 있습니다.

http://api.jquery.com/jQuery.ajax/



1

js fetch를 사용할 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.