짧은 답변
HTTP 응답 코드는 아니지만 WhatWG에서 XMLHttpRequest
또는 Fetch 응답 의 상태 속성에 대한 유효한 값으로 문서화합니다 .
일반적으로 보고 할 실제 HTTP 상태 코드가 없거나 요청을 보내거나 응답을받는 동안 오류가 발생한 경우 사용되는 기본값 입니다. 이 경우 가능한 시나리오에는 다음이 포함되지만 이에 국한되지는 않습니다.
- 요청이 아직 전송되지 않았거나 중단되었습니다.
- 브라우저는 여전히 응답 상태 및 헤더를 수신하기를 기다리고 있습니다.
- 요청 중에 연결이 끊어졌습니다.
- 요청 시간이 초과되었습니다.
- 요청에 무한 리디렉션 루프가 발생했습니다.
- 브라우저는 응답 상태를 알고 있지만 동일 출처 정책 과 관련된 보안 제한으로 인해 액세스 할 수 없습니다 .
긴 답변
먼저, 0은 HTTP 상태 코드가 아닙니다. RFC 7231 섹션 6.1 에는 0을 포함하지 않는 전체 목록이 있으며 섹션 6의 소개에서는 다음과 같이 명확하게 설명합니다.
상태 코드 요소는 3 자리 정수 코드입니다.
0은 아닙니다.
그러나 .status
모든 관련 세부 정보를 추적하는 것은 약간 까다 롭지 만 XMLHttpRequest 객체 의 속성 값으로 0 이 문서화되어 있습니다. https://xhr.spec.whatwg.org/#the-status-attribute 에서 시작 하여 .status
속성을 문서화합니다 .
status
속성은 반환해야 응답 의 상태를 .
공허하고 팽팽하게 들릴지 모르지만 실제로 여기에 정보가 있습니다! 이 문서는 여기서 응답이 아닌 의 .response
속성에 대해 이야기 XMLHttpRequest
하고 있으므로 XHR 객체의 상태 정의가 Fetch 사양의 응답 상태 정의로 연기된다는 것을 알려줍니다.
그러나 어떤 응답 대상? 실제로 아직 응답을받지 못했다면 어떻게해야합니까? "응답"이라는 단어의 인라인 링크를 클릭하면 https://xhr.spec.whatwg.org/#response 로 이동합니다.
에 XMLHttpRequest
연관된 응답이 있습니다. 달리 명시되지 않는 한 네트워크 오류 입니다.
따라서 우리가받는 상태의 응답은 기본적으로 네트워크 오류입니다. XHR 사양에서 "set response to" 라는 문구 가 사용되는 모든 곳을 검색 하면 다음과 같이 5 곳에 설정되어 있음을 알 수 있습니다.
Fetch 표준을 살펴보면 다음을 확인할 수 있습니다.
네트워크 오류가 A는 응답 그의 상태를 항상0
따라서 XHR 사양에서 응답을 네트워크 오류로 설정해야한다고 말하는 경우 XHR 개체에서 0 상태를 볼 수 있음을 즉시 알 수 있습니다. (흥미롭게도 여기에는 본문의 스트림이 "오류"되는 경우가 포함됩니다. Fetch 사양은 다음과 같이 본문 을 구문 분석하는 동안 발생할 수 있다고 알려줍니다. 상태를 수신 따라서 이론적으로 XHR 객체가 상태를 가질 수 있다고 가정합니다. 200으로 설정 한 다음 본문을받는 동안 메모리 부족 오류 또는 무언가가 발생하여 상태를 다시 0으로 변경합니다.)
또한 Fetch 표준에서 상태가 0으로 정의 된 몇 가지 다른 응답 유형이 있으며, 그 존재는 교차 출처 요청 및 동일 출처 정책과 관련됩니다.
불투명 필터링 된 응답은 ... 상태가 다음 과 같은 필터링 된 응답 입니다.0
... .
불투명 리디렉션 필터링 된 응답은 ... 상태가 ... 인 필터링 된 응답 입니다 0
.
(이 두 가지 응답 유형에 대한 기타 여러 세부 사항은 생략 됨).
그러나이 외에도 Fetch 알고리즘 (이미 살펴본 XHR 사양이 아니라)이 브라우저에서 네트워크 오류를 반환하도록 요청하는 경우도 많습니다 ! 실제로 Fetch 표준에서는 "네트워크 오류 반환"이라는 문구가 40 번 나타납니다 . 여기에 40 개를 모두 나열하지는 않겠지 만 다음과 같은 내용이 포함되어 있습니다.
- 요청의 체계가 인식되지 않는 경우 (예 : madeupscheme : //foobar.com에 요청을 보내려는 경우)
- 놀랍도록 모호한 명령 "의심스러운 경우 네트워크 오류를 반환하십시오." ftp : // 및 file : // URL을 처리하기위한 알고리즘
- 무한 리디렉션 : "요청의 리디렉션 수가 20 인 경우 네트워크 오류를 반환합니다."
- "httpRequest의 응답 오염이"cors "가 아니고 요청 및 응답이 차단 된 출처 간 리소스 정책 검사가 차단 된 경우 네트워크 오류를 반환합니다."와 같은 CORS 관련 문제가 많습니다.
- 연결 실패 : " 연결 이 실패하면 네트워크 오류를 반환합니다."
즉, 무언가 잘못 될 때마다 다른 , 서버에서 500 또는 400과 같은 실제 HTTP 오류 상태 코드를받는 XHR 개체의 상태 속성이 0이거나 브라우저의 응답 개체를 가져옵니다. 사양에 열거 된 가능한 특정 원인의 수는 방대합니다.
마지막으로, 어떤 이유로 사양의 역사에 관심이 있다면이 답변은 2020 년에 완전히 재 작성되었으며이 답변의 이전 개정판에 관심이있을 수 있습니다 . 이 답변이 참조하는 더 현대적이고 복잡한 WhatWG 사양으로 대체되기 전에 XHR에 대한 이전 (그리고 훨씬 더 간단한) W3 사양.