HTTP Status 코드0은 의미가 있나요?
브라우저의 스크립트에서 XMLHttpRequest를 작성할 때 브라우저가 오프라인으로 동작하도록 설정되어 있거나 네트워크 케이블이 뽑혀 있는 경우 오류와 함께 요구가 완료되며 상태 = 0.0은 허용되는 HTTP 상태 코드 목록에 표시되지 않습니다.
상태 코드 0은 무엇을 의미합니까?모든 브라우저와 모든 HTTP 클라이언트 유틸리티에서 동일한 것을 의미합니까?HTTP 사양의 일부입니까, 아니면 다른 프로토콜 사양의 일부입니까?서버 주소를 해결할 수 없었기 때문에 HTTP 요구를 전혀 할 수 없었던 것 같습니다.
사용자에게 어떤 오류 메시지가 표시되어야 합니까?인터넷에 연결되어 있지 않거나 웹 사이트에 문제가 있거나 주소에 입력 오류가 있을 수 있습니다.
게다가 FireFox 에서는 「오프라인으로 작업」으로 설정되어 있으면 동작이 표시되지만, Microsoft Internet Explorer 에서는 「오프라인으로 작업」으로 설정되어 있으면 동작이 표시되지 않는 것도 덧붙입니다.IE 에서는, 온라인이 되는 옵션을 제공하는 다이얼로그가 표시됩니다.FireFox는 오류를 반환하기 전에 사용자에게 알리지 않습니다.
더 나은 에러 메시지를 보여달라는 요청에 따라 문의드립니다.Internet Explorer의 기능은 양호합니다.사용자에게 문제의 원인을 알려주고 문제를 해결할 수 있는 옵션을 제공합니다.FireFox와 동등한 UX를 제공하려면 문제의 원인을 추론하여 사용자에게 알려야 합니다.상태 0에서 추론할 수 있는 것은 무엇입니까?보편적인 의미가 있는 거야, 아니면 아무것도 말해주지 않는 거야?
단답
HTTP What(What)입니다. XMLHttpRequest
가져오다
일반적으로 보고할 실제 HTTP 상태 코드가 없거나 요청을 전송하거나 응답을 수신하는 동안 오류가 발생했을 때 사용되는 기본값입니다.이 경우 다음과 같은 시나리오를 생각할 수 있습니다.
- 요청이 아직 전송되지 않았거나 중단되었습니다.
- 브라우저는 응답 상태 및 헤더를 수신하기 위해 대기 중입니다.
- 요청 중에 연결이 끊어졌습니다.
- 요청이 시간 초과되었습니다.
- 요청에서 무한 리다이렉트루프가 발생했습니다.
- 브라우저는 응답 상태를 인식하지만, 동일한 원본 정책과 관련된 보안 제한으로 인해 액세스할 수 없습니다.
장황한 답변
첫 번째로 다시 강조하겠습니다0 은 HTTP 상태 코드가 아닙니다.RFC 7231 섹션 6.1에는 0이 포함되지 않은 완전한 목록이 있으며 섹션 6의 도입부에는 다음과 같이 명시되어 있습니다.
status-code 요소는 3자리 정수 코드입니다.
0은 아닙니다.
의 값이고 0은 ㄴ의 입니다..status
XMLHttpRequest 객체의 속성이 문서화되어 있습니다.다만, 모든 관련의 상세를 추적하는 것은 조금 곤란합니다.https://xhr.spec.whatwg.org/ #the-status-display에서 시작하여.status
아트리뷰트
공허하고 동문서답으로 들릴지 모르지만, 실제로는 여기에 정보가 있습니다!에서는 이 문서에 대해 ..response
「」의 XMLHttpRequest
응답은 아니기 때문에 XHR 오브젝트의 상태 정의가 Fetch 사양의 응답 상태 정의로 지연되고 있음을 알 수 있습니다.
하지만 어떤 반응 객체?만약 우리가 아직 답변을 받지 못했다면요?'response'라는 단어의 인라인링크를 사용하면 https://xhr.spec.whatwg.org/#response로 이동합니다.이 링크의 설명은 다음과 같습니다.
에는 관련된 응답이 있습니다.특별히 명기되어 있지 않는 한, 네트워크 에러입니다.
따라서 상태가 표시되는 응답은 기본적으로 네트워크 오류입니다.또한 XHR 사양에서 "set response to"라는 문구가 사용되는 모든 곳을 검색하면 다음과 같이 5개소가 설정되어 있음을 알 수 있습니다.
네트워크 오류 발생 시:
Fetch를 사용하여 요청을 전송함으로써 생성되는 응답에 대해 Fetch 프로세스 응답 태스크(XHR 요구가 비동기인 경우) 또는 Fetch 프로세스 응답 엔드 오브 바디 태스크(XHR 요구가 동기인 경우) 중 하나를 통해 응답합니다.
Fetch 표준을 보면 다음을 알 수 있습니다.
따라서 XHR 사양에 따라 응답이 네트워크 오류로 설정되어야 하는 경우 XHR 객체에 0의 상태가 표시되는 것을 즉시 알 수 있습니다(재미하게도 이는 본체의 스트림이 "오류"되는 경우를 포함합니다).Fetch 사양은 상태를 수신한 후 본문을 해석할 때 발생할 수 있음을 알려 줍니다.따라서 이론적으로는 XHR 오브젝트의 상태를 200으로 설정하고 본문을 수신하는 동안 메모리 부족 오류 등이 발생하여 상태를 0으로 되돌릴 수 있다고 생각합니다.)
또, Fetch 표준에서는, 상태가 0으로 정의되어 있는 다른 몇개의 응답 타입이 존재해, 그 존재가 크로스 오리진 요구와 같은 오리진정책에 관련하고 있는 것에 주의하고 있습니다.
불투명 필터링된 응답은 필터링된 응답으로, 상태는 다음과 같습니다.
0
불투명 리다이렉트필터링된 응답은 필터링된 응답입니다.상태는 다음과 같습니다.
0
(이 두 가지 응답 유형에 대한 기타 자세한 내용은 생략합니다).
그러나 이 외에도 (이미 살펴본 XHR 사양이 아닌) Fetch 알고리즘이 브라우저에 네트워크 오류를 반환하도록 요구하는 경우가 많습니다.실제로 "return a network error"라는 문구는 Fetch 표준에 40회 표시됩니다.여기에서는 40개 모두를 나열하지 않지만 다음과 같은 내용이 포함되어 있습니다.
- 요청 스킴이 인식되지 않는 경우(예를 들어 madeupscheme://foobar.com로 요청을 전송하려고 합니다)
- ftp:// 및 파일:// URL을 처리하는 알고리즘의 "When insoubt, return a network error"라는 매우 애매한 명령어
- 무한 리다이렉트: "요구의 리다이렉트 수가 20이면 네트워크 오류를 반환합니다."
- "httpRequest의 응답 도장이 "cors"가 아닌 경우, 요구 및 응답 반환을 차단한 크로스 오리진 리소스 정책 체크 후 네트워크 오류를 반환한다." 등 CORS 관련 문제가 산적해 있습니다.
- 연결 실패: "연결 실패 시 네트워크 오류를 반환합니다."
즉, 서버로부터 실제 HTTP 에러 상태 코드(500 또는 400 등)를 취득하는 것 이외에는 문제가 발생할 때마다, XHR 오브젝트 또는 브라우저의 Fetch response 오브젝트의 상태 Atribute가 0이 됩니다.명세서에 열거된 가능한 특정 원인의 수는 방대하다.
마지막으로, 어떤 이유로 스펙의 이력에 관심이 있는 경우, 이 답변은 2020년에 완전히 다시 작성되었으며, XHR에 대한 이전 W3 사양에서 기본적으로 동일한 결론을 도출한 이 답변의 이전 개정판에 관심이 있을 수 있습니다.이 답변이 나타내는 보다 현대적이고 복잡한 WhatWG 사양으로 대체되었습니다.
상태 0은 페이지를 갱신하거나 도달할 수 없는 URL을 요구함으로써 응답을 받기 전에 Ajax 콜이 취소되었을 때 표시됩니다.
이 상태는 문서화되어 있지 않지만 gadget.io에서 ajax 및 makeRequest 호출을 통해 존재합니다.
오래된 포스트인 거 알아.그러나 이러한 문제는 여전히 존재한다.
여기 그 주제에 대한 저의 연구결과 중 몇 가지가 있습니다.
"Status" 0은 XMLHttpRequest 사양에 따라 다음 3가지 중 하나를 의미합니다.
DNS 이름 확인 실패(네트워크 플러그가 뽑힌 경우 등)
서버가 응답하지 않음(즉, 도달할 수 없거나 응답하지 않음)
요청이 CORS 문제로 인해 중단되었습니다(중단은 사용자 에이전트에 의해 수행되며 OPTIONS 프리플라이트 실패 후에 실행됩니다).
더 자세히 알아보려면 XMLHttpRequest의 inner를 자세히 살펴보십시오.ready-state update sequence([0,1,3,4]는 일반 시퀀스, [0,1,4]는 상태0에 대응, [0,1,2,4]는 에러인지 아닌지를 나타내는 콘텐츠가 송신되지 않는 것을 의미합니다).청취자를 xhr(onready statechange, 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;
문서 http://www.w3.org/TR/XMLHttpRequest/#the-status-displayed는 요청은 다른 곳으로 이동하기 전에 취소되었음을 의미합니다.
iOS 9 이후로는 비보안 HTTP 웹 서비스에 요청을 하기 전에 "App Transport Security Settings"를 info.plist 파일에 추가하고 "Allow Arbitary Loads"를 허용해야 합니다.내 앱 중 하나에 이 문제가 있었습니다.
네, ajax 콜이 어떻게 중단되었습니까?원인은 다음과 같습니다.
- Ajax 요청이 완료되기 전에 사용자가 다른 페이지로 이동했습니다.
- Ajax 요청에 시간 초과가 있습니다.
- 서버가 응답을 반환할 수 없습니다.
언급URL : https://stackoverflow.com/questions/3825581/does-an-http-status-code-of-0-have-any-meaning
'programing' 카테고리의 다른 글
가장 우아한 방법으로 팝업 표시 (0) | 2023.04.01 |
---|---|
Azure 계정 이름과 계정 키는 어디서 찾을 수 있나요? (0) | 2023.04.01 |
스프링 부트, 스프링 데이터 JPA(복수의 데이터 소스 포함) (0) | 2023.04.01 |
HTTPS/HTTP 포트를 실행하도록 스프링 부트를 설정하는 방법 (0) | 2023.04.01 |
React를 사용하여 쿼리 문자열을 가져오려면 어떻게 해야 합니까? (0) | 2023.04.01 |