XMLHttpRequest
==============

`XMLHttpRequest` (XHR) 객체는 서버와 상호작용할 때 사용합니다. XHR을 사용하면 페이지의 새로고침 없이도 URL에서 데이터를 가져올 수 있습니다. 이를 활용하면 사용자의 작업을 방해하지 않고 페이지의 일부를 업데이트할 수 있습니다.

`XMLHttpRequest`는 AJAX (en-US) 프로그래밍에 많이 사용됩니다.

EventTarget

XMLHttpRequestEventTarget

(en-US)

XMLHttpRequest
이름에 `XML`이 들어가긴 하지만, `XMLHttpRequest`은 XML 뿐만 아니라 모든 종류의 데이터를 가져올 수 있습니다.

이벤트 데이터나 메시지 데이터를 서버에서 가져와야 하는 통신의 경우, `EventSource` (en-US) 인터페이스를 통한 서버발 이벤트(Server-sent events)의 사용을 고려하세요. 완전한 양방향 통신의 경우에는 WebSocket이 더 좋은 선택일 수 있습니다.

**참고:** This feature is available in Web Workers, except for Service Workers

생성자
---

`XMLHttpRequest()` (en-US)

`XMLHttpRequest`를 초기화합니다. 다른 메서드가 호출되기 전에 호출되어야 합니다.

속성
--

`XMLHttpRequestEventTarget` (en-US)과 `EventTarget`의 속성을 상속합니다.

`XMLHttpRequest.readyState` (en-US) 읽기 전용

요청의 상태를 나타내는 숫자를 반환합니다.

`XMLHttpRequest.response` (en-US) 읽기 전용

`XMLHttpRequest.responseType` (en-US)의 값에 따라, 응답 개체 본문을 포함하는 `ArrayBuffer`, `Blob`, `Document`, JavaScript 객체, 또는 `DOMString`을 반환합니다.

`XMLHttpRequest.responseText` (en-US) 읽기 전용

요청에 대한 응답을 텍스트로 나타내는 `string`을 반환합니다. 요청이 실패했거나, 아직 전송하지않은 경우에는 `null`을 반환합니다.

`XMLHttpRequest.responseType` (en-US)

응답의 유형을 지정합니다.

`XMLHttpRequest.responseURL` (en-US) 읽기 전용

응답의 URL을 직렬화한 값을 반환합니다. URL이 `null`이면 빈 문자열을 반환합니다.

`XMLHttpRequest.responseXML` (en-US) 읽기 전용

요청에 대한 응답을 포함한 `Document`를 반환합니다. 요청이 실패했거나, 아직 전송하지 않았거나, 응답을 XML/HTML로 파싱할 수 없는 경우 `null`을 반환합니다. Web Worker에서 사용할 수 없습니다.

`XMLHttpRequest.status` (en-US) 읽기 전용

응답의 HTTP 상태 코드를 반환합니다.

`XMLHttpRequest.statusText` (en-US) 읽기 전용

HTTP 서버가 반환한 응답 문자열을 담은 `string`을 반환합니다. `XMLHttpRequest.status` (en-US)와 달리, `statusText`는 "`OK`"와 같은 응답 상태 메시지의 전문을 반환합니다

**참고:** HTTP/1.1의 상태 텍스트와 같이 프로토콜 버전과 응답의 이유를 알릴 방법이 HTTP/2 명세에는 없습니다. (RFC 7540, 섹션 8.1.2.4: Response Pseudo-Header Fields)

`XMLHttpRequest.timeout`

요청을 자동으로 종료하기 전에 대기할 시간을 나타내는 밀리초 단위 값입니다.

`XMLHttpRequest.upload` 읽기 전용

업로드 과정을 나타내는 `XMLHttpRequestUpload` (en-US)입니다.

`XMLHttpRequest.withCredentials` (en-US)

쿠키 또는 권한 부여 헤더와 같은 자격 증명을 사용하여 사이트 간 `Access-Control` 요청을 만들어야 하는 경우 `true`를 반환합니다. 그렇지 않으면 `false`를 반환합니다.

비표준 속성들
-------

`XMLHttpRequest.channel` (en-US)읽기 전용

요청을 수행할 때 객체에서 사용하는 채널입니다.

`XMLHttpRequest.mozAnon` (en-US)읽기 전용

'boolean'입니다. `true`인 경우 쿠키 및 인증 헤더 없이 요청이 전송됩니다.

`XMLHttpRequest.mozSystem` (en-US)읽기 전용

'boolean'입니다. `true`인 경우 `same origin policy`가 요청에 적용되지 않습니다.

`XMLHttpRequest.mozBackgroundRequest` (en-US)

'boolean'입니다. 객체가 백그라운드에서 서비스 요청을 나타내는지 여부를 나타냅니다.

메서드
---

`XMLHttpRequest.abort()` (en-US)

이미 요청을 전송한 경우, 그 요청을 중단합니다.

`XMLHttpRequest.getAllResponseHeaders()` (en-US)

모든 응답 헤더를 CRLF로 구분해서 하나의 문자열로 반환합니다. 응답을 받지 못한 경우 `null`을 반환합니다.

`XMLHttpRequest.getResponseHeader()` (en-US)

지정한 헤더의 텍스트를 담은 문자열을 반환합니다. 응답을 받지 못했거나, 지정한 헤더가 응답에 존재하지 않으면 `null`을 반환합니다.

`XMLHttpRequest.open()` (en-US)

요청을 초기화합니다.

`XMLHttpRequest.overrideMimeType()` (en-US)

서버가 반환한 MIME 유형을 재정의합니다.

`XMLHttpRequest.send()` (en-US)

요청을 전송합니다. 비동기 요청(기본 동작)인 경우, `send()`는 요청을 전송하는 즉시 반환합니다.

`XMLHttpRequest.setRequestHeader()`

HTTP 요청 헤더의 값을 설정합니다. 반드시 `send()` (en-US)보다 먼저, 그러나 `open()` (en-US)보다 뒤에 호출해야 합니다.

이벤트
---

`abort` (en-US)

`XMLHttpRequest.abort()` (en-US)를 호출하는 등, 요청이 중단되면 발생합니다. `onabort` 속성으로도 수신할 수 있습니다.

`error` (en-US)

요청이 오류를 마주치면 발생합니다. `onerror` 속성으로도 수신할 수 있습니다.

`load` (en-US)

`XMLHttpRequest` 트랜잭션이 성공적으로 끝나면 발생합니다. `onload` 속성으로도 수신할 수 있습니다.

`loadend` (en-US)

요청이 성공적(`load` (en-US) 이벤트)으로 끝나거나, 실패(`abort` (en-US) 또는 `error` (en-US) 이벤트)한 후 발생합니다. `onloadend` 속성으로도 수신할 수 있습니다.

`loadstart` (en-US)

응답 데이터 로딩을 시작했을 때 발생합니다. `onloadstart` 속성으로도 수신할 수 있습니다.

`progress` (en-US)

요청이 데이터를 수신하는 동안 주기적으로 발생합니다. `onprogress` 속성으로도 수신할 수 있습니다.

`readystatechange` (en-US)

`readyState` (en-US) 속성이 바뀔 때마다 발생합니다. `onreadystatechange` 속성으로도 수신할 수 있습니다.

`timeout`

응답에 소요된 시간이 사전에 지정한 값을 초과해서 요청이 취소될 때 발생합니다. `ontimeout` 속성으로도 수신할 수 있습니다.

명세
--

| Specification |
| --- |
| XMLHttpRequest Standard # interface-xmlhttprequest |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `XMLSerializer` (en-US): DOM 트리를 XML로 직렬화
* `XMLHttpRequest`를 다루는 MDN 자습서:
    + Ajax 시작하기
    + XMLHttpRequest 사용하기 (en-US)
    + XMLHttpRequest에서의 HTML (en-US)
    + Fetch API
* HTML5 Rocks — New Tricks in XMLHttpRequest2
* Feature-Policy 지시자 `sync-xhr` (en-US)