IT

HTTP 상태 코드 0은 의미가 있습니까?

lottoking 2020. 9. 11. 08:16
반응형

HTTP 상태 코드 0은 의미가 있습니까?


브라우저의 펼쳐에서 XMLHttpRequest를 만들 때 브라우저가 오프라인으로 작동하도록 설정되어 있거나 네트워크 케이블이 완료되고 상태 = 0으로 표시됩니다. 0은 허용 항목에 준비되지 않은 것입니다. HTTP 상태 코드.

상태 코드 0은 무엇을 의미합니까? 모든 브라우저와 모든 HTTP 클라이언트 유틸리티에서 동일한 의미입니까? HTTP 사양의 일부입니까 아니면 다른 프로토콜 사양의 일부입니까? 아마도 서버 주소를 확인할 수 없기 때문에 HTTP 요청을 전혀 할 수 없음을 의미 할 것입니다.

사용자에게 표시하는 데 오류 오류 메시지는 무엇입니까? "인터넷에 연결되어 있지 않으면 웹 사이트에 문제가 있거나 주소에 입력 오류가있을 수 있습니다."

여기에 "오프라인 작업"으로 설정하면 FireFox에서 동작을 볼 수 있습니다 "오프라인으로 작업"설정하면 Microsoft Internet Explorer에서는 표시되지 않습니다. IE에서 사용자는 온라인으로 전환 할 수있는 옵션을 제공하는 대화 상자를 얻습니다. FireFox는 오류를 반환하기 전에 사용자에게 알리지 언어를 사용합니다.

"더 나은 오류 메시지 표시"요청에 대한 응답으로 요청합니다. Internet Explorer의 기능은 좋습니다. 사용자에게 문제의 원인을 알려주고 문제를 해결하는 옵션을 제공합니다. FireFox와 동등한 UX를 제공 비용 문제의 원인을 유추하고 사용자에게 알려야합니다. 어디에 있는지 0에서 총 무엇을 추론 할 수 있습니까? 보편적 인 의미를 가지고 있습니까? 아니면 아무 말도하지 않습니까?


짧은 답변

그건 하지 HTTP 코드 있지만 응답 됩니다 에 유효한 값으로 W3 문서화 status의 속성 XMLHttpRequest(따라서도의 jqXHRjQuery를를 사용자를 위해, 객체).

요청을 보내지 사고거나, 명시 적으로 중단했거나, 페이지가 언로드, 여러 가능한 값 중 하나에 대해 x 가 잘못 되었기 때문에보고 할 수있는 실제 HTTP 응답 코드가없는 모든 상황을 다룹니다. X .

긴 답변

먼저, 0은 HTTP 상태 코드 아닙니다 . RFC 7231 섹션 6.1 에는 0이 포함되지 않은 전체 목록이 있고 6 소개에서는 다음과 같이 명확하게 설명합니다.

상태 코드 요소는 3 자리 정수 코드입니다.

0은 아닙니다.

그러나 객체 status속성 값으로 0 문서화됩니다. http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute의 문서에서 :XMLHttpRequest

4.7.1 상태 속성

status속성은 다음 단계를 실행하는 결과를 반환해야합니다.

  1. 상태가 UNSENT 또는 OPENED이면 0을 반환합니다.

  2. 오류 플래그가 설정되어 있으면 0을 반환합니다.

  3. HTTP 상태 코드를 반환합니다.

사양을 더 깊이 파고 들어 0을 반환하는 조건이 무엇을 의미하는지 알아낼 수 있습니다. 에서 http://www.w3.org/TR/XMLHttpRequest/#states :

4.5 상태

...

UNSENT (숫자 값 0)

개체가 생성됩니다.

OPENED (숫자 값 1)

open()방법은 유행으로 호출되었습니다. 상태에서 요청 고객이 헤더 는를 사용하여 설정할 setRequestHeader()수 있으며 요청 고객은 send()메서드를 사용하여 만들 수 있습니다 .

...

오류 플래그 네트워크 오류 또는 종료를 가져 오기의 몇 가지 유형을 나타냅니다. 처음에는 설정되지 않았습니다.

그것은 다음 수 주 후에 유의도 관련이 UNSENT하고 OPENED있습니다 HEADERS_RECEIVED:

HEADERS_RECEIVED (숫자 값 2)

모든 리디렉션 (있는 경우)을보고 최종 응답의 모든 HTTP 헤더를 수신했습니다. 이제 개체의 여러 응답 멤버를 사용할 수 있습니다.

이 모든 것을 종합하면 짧은 대답은 0이 반환 할 실제 상태 코드가 없을 때 수업 status속성에 반환되는 XMLHttpRequest것입니다.

  • 요청이 아직 전송되지 않았거나
  • 요청이 전송되었지만 응답의 헤더가 아직 수신되지 않았습니다.
  • 문서에 나열된 여러 가능한 상황 중 하나 가 발생하여 "오류 플래그"가 설정되었습니다.

좋습니다.하지만 어떤 오류로 인해이 신비한 "오류 플래그"가 설정 될 수 있습니까? W3 문서에서 '오류 플래그'에 대해 CTRL-F를 사용 하면 요청을 보낼 때 설정해제 되고 "요청을 종료"하는 알고리즘의 일부로 설정 됩니다. 알고리즘이 호출 된 모든 위치 찾아 보면 다음과 같은 경우에 발생 함을 알 수 있습니다.

  • 요청이 open()메소드 로 열리거나 다시 열림
  • 요청이 가비지 수집 됨 (예 : 페이지를 떠날 때)
  • 요청이 abort()메소드 로 중단되었습니다.
  • 다음 상황 중 하나가 발생할 때 발생할 수있는 '요청 오류'가 발생합니다.

    • 네트워크 오류가 발생합니다.

      • 무한 리디렉션 루프가 있습니다.
      • 있다 /있다

        DNS 오류, TLS 협상 실패 또는 기타 유형의 네트워크 오류

      • 요청이 CORS 요청이었으며 응답을 공유 할 수 없습니다.
    • 중단 오류가 발생하며 다음 경우에만 발생할 수 있습니다.

      최종 사용자가 요청을 취소합니다.

      뭘 의미하든. AJAX 요청이 발생하는시기를 사용자에게 표시하고 명시 적으로 취소 할 수있는 기회를 제공하는 브라우저를 모르기 때문에 적어도 오늘은 관련성이 없다고 생각합니다.

    • 시간 초과 오류가 발생합니다. 이는 합리적으로

      timeout0이 아니고 요청이 시작되었으므로에 지정된 시간 (밀리 초) timeout이 지났습니다.

멀리로 XMLHttpRequest간다의 모든 것을.

그 외에도 XMLHttpRequestJavaScript 외부 언어의 HTTP 라이브러리가 서버에서 상태 코드를 수신하지 않은 경우 기본값으로 0 상태 코드를 비슷하게 사용할 수 있다고 추측합니다.


상태 0은 페이지를 새로 고치거나 연결할 수없는 URL을 요청하여 응답을 받기 전에 ajax 호출이 취소 된 경우 나타납니다.

이 상태는 문서화되어 있지 않지만 gadget.io의 ajax 및 makeRequest 호출을 통해 존재합니다.


http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute 문서 는 어디로 든 가기 전에 요청이 취소되었음을 의미합니다.


오래된 게시물이라는 것을 알아 두십시오. 그러나 이러한 문제는 여전히 존재합니다.

다음은 주제에 대한 제가 찾은 결과입니다.

"상태"0은 XMLHttpRequest 사양에 따라 다음 세 가지 중 하나를 의미합니다.

  • DNS 이름 확인 실패 (예 : 네트워크 플러그를 뽑은 경우)

  • 서버가 응답하지 않음 (일명 도달 할 수 없거나 응답하지 않음)

  • CORS 문제로 인해 요청이 중단되었습니다 (사용자 에이전트가 중단을 수행하고 실패한 OPTIONS 프리 플라이트를 따릅니다).

더 나아가고 싶다면 XMLHttpRequest의 내부에 대해 자세히 알아보십시오. 준비 상태 업데이트 시퀀스 ([0,1,2,3,4]는 정상 시퀀스, [0,1,4]는 상태 0에 해당, [0,1,2,4]는 내용이 없음을 의미 함) 읽기를 제안합니다. 오류 일 수도 있고 아닐 수도 있습니다.) 세부 사항을 파악하기 위해 리스너를 xhr (onreadystatechange, onabort, onerror, ontimeout)에 연결할 수도 있습니다.

사양에서 ( XHR Living 사양 ) :

const unsigned short UNSENT = 0;
const unsigned short OPENED = 1;
const unsigned short HEADERS_RECEIVED = 2;
const unsigned short LOADING = 3;
const unsigned short DONE = 4;

iOS 9부터는 "앱 전송 보안 설정"을 info.plist 파일에 추가하고 비보안 HTTP 웹 서비스에 요청하기 전에 "임의로드 허용"을 허용해야합니다. 내 앱 중 하나에서이 문제가 발생했습니다.


예, 아약스 호출이 어떻게 중단되었는지 일부. 원인은 다음과 같을 수 있습니다.

  1. ajax 요청이 완료되기 전에 사용자는 다른 페이지로 이동했습니다.
  2. Ajax 요청에 시간 초과가 있습니다.
  3. 서버가 응답을 반환 할 수 없습니다.

참고 URL : https://stackoverflow.com/questions/3825581/does-an-http-status-code-of-0-have-any-meaning

반응형