IT박스

AJAX가 HTTP 상태 코드 0을 반환하는 이유는 무엇입니까?

itboxs 2020. 6. 26. 19:05
반응형

AJAX가 HTTP 상태 코드 0을 반환하는 이유는 무엇입니까?


어떤 이유로 든 AJAX ( 개발 된 응용 프로그램 사용)를 사용하면 브라우저가 업로드를 중지하고의 상태 코드를 반환합니다 0. 왜 이런 일이 발생합니까?


다른 경우 :

AJAX 호출0보냈고 AJAX 응답을 받기 전에 브라우저 새로 고침이 트리거 된 경우 의 상태 코드를 얻을 수 있습니다 . AJAX 통화가 취소되고이 상태가 표시됩니다.


내 경험상 다음과 같은 경우 상태가 0으로 표시됩니다.

  • 사이트 간 스크립팅 수행 (액세스가 거부 된 위치)
  • 연결할 수없는 URL 요청 (오타, DNS 문제 등)
  • 그렇지 않으면 요청이 차단됩니다 (광고 차단기 확인)
  • 위와 같이 요청이 중단 된 경우 (브라우저가 페이지에서 이동 함)

코드와 관련이 없을 수도 있지만 jQuery와 AJAX 상태 코드 0을 인터넷 검색 할 때이 StackOverflow 질문이 발생하므로 다른 경우이 문제가 발생하는 사람들에게 답을 줄 것이라고 생각했습니다. 최근 에이 문제가 발생하여 다음 링크가 유용하다는 것을 알았습니다.


를 사용할 때 동일한 문제가 발생합니다 <button onclick="">submit</button>. 그런 다음 사용하여 해결<input type="button" onclick="">


상태 코드 0은 요청한 URL에 도달 할 수 없음을 의미합니다. 변경하여 // 뭔가 / 일 : HTTPhttps : //로 뭔가 / 일이 나를 위해 일했다. IE는 상태 코드가 0 일 때 "권한이 거부되었습니다"라는 오류를 발생시킵니다. 다른 브라우저에서는 그렇지 않습니다.


www가 접두사로 지정된 특정 도메인의 쿠키로 정의 된 세션 내에서도 ajax 호출이 실패 할 수 있습니다. 당신이 그때 www없이 PHP 스크립트를 호출하면. URL에서 접두사를 사용하면 호출도 실패하고 그 반대도 마찬가지입니다.


이 기사가 도움 되었습니다. AJAX를 통해 양식을 제출하고 return false(내 아약스 요청 후) 사용을 잊어 버렸 으므로 고전 양식 제출이 이루어졌지만 이상하게 완료되지 않았습니다.


Google 아약스 상태 0에 표시되기 때문에 시간을 낭비하는 데 도움이되는 팁을 남기고 싶었습니다 ... Ajax를 사용하여 Codeigniter의 Phil의 REST_Controller 인 PHP 서비스를 호출했습니다 (이것이 확실하지 않은지 확실하지 않습니다) 그것과 관련이 있거나없는) 상태 0, readystate 0을 계속 얻었고 나를 미치게 만들었습니다. 나는 그것을 디버깅하고 있었고 메시지를 종료하는 대신 에코하고 반환 할 때 성공했다는 것을 알았습니다. 마침내 디버깅을 끄고 시도해 보았습니다. PHP가있는 xDebug 디버거가 어떻게 든 응답을 수정 한 것 같습니다. PHP 디버거를 사용하는 경우이를 끄고 도움이되는지 확인하십시오.


jquery가 상태 코드 0을 제공하는 또 다른 경우를 발견했습니다. 어떤 이유로 XMLHttpRequest가 정의되지 않은 경우이 오류가 발생합니다.

분명히 이것은 일반적으로 웹에서 발생하지 않지만 야간 파이어 폭스 빌드의 버그로 인해 내가 작성한 추가 기능 에서이 문제가 발생했습니다. :)


"우연한"양식 제출은 내가 겪고있는 문제였습니다. 방금 FORM 태그를 모두 제거했는데 문제가 해결 된 것 같습니다. 모두 감사합니다!


나는 같은 문제가 있었고 브라우저의 XSS (cross cross scripting) 블록과 관련이있었습니다. 서버를 사용하여 작동하게했습니다.

http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0을 살펴보십시오 .


jquery ajax 호출의 상태 코드 0과 비슷한 문제가 발생하여 진단하는 데 하루 종일 걸렸습니다. 아직 아무도이 이유를 언급하지 않았으므로 공유하겠다고 생각했습니다.

우리의 경우 문제는 HTTP 서버 충돌이었습니다. PHP의 일부 버그가 Apache를 불고 있었으므로 클라이언트 측에서는 다음과 같습니다.

mirek@toccata:~$ telnet our.server.com 80
Trying 180.153.xxx.xxx...
Connected to our.server.com.
Escape character is '^]'.
GET /test.php HTTP/1.0
Host: our.server.com

Connection closed by foreign host.
mirek@toccata:~$ 

여기서 test.php에는 충돌 코드가 포함되어 있습니다. 서버에서 리턴 된 데이터가 없습니다 (헤더조차도 아님) => ajax 호출이 상태 0으로 중단되었습니다.


나에게 문제는 호스팅 회사 (Godaddy)가 상당한 응답 데이터 (수십 킬로바이트 이상)가있는 POST 작업을 일종의 보안 위협으로 취급하여 발생했습니다. 이 중 6 개 이상이 1 분 동안 발생한 경우 호스트는 다음 1 분 동안 POST 요청에 응답 한 PHP 코드 실행을 거부했습니다. 나는 호스트가 대신 무엇을했는지 확실하지 않지만 tcpdump를 사용하면 TCP 재설정 패킷이 브라우저의 POST 요청에 대한 응답으로 오는 것을 보았습니다. 이로 인해 jqXHR 객체에 반환 된 http 상태 코드가 0이되었습니다.

POST에서 GET으로 작업을 변경하면 문제가 해결되었습니다. Godaddy가이 제한을 적용한 이유는 확실하지 않지만 호스트 변경보다 코드 변경이 더 쉽습니다.


필자의 경우 django 서버를 실행 http://127.0.0.1:8000/하지만 ajax 호출을 (으)로 보내서 발생했습니다 http://localhost:8000/. 동일한 주소로 매핑 될 것으로 예상하더라도 요청을 localhost로 보내지 않도록해야합니다.


필자의 경우, url: ''아약스 설정에서 설정하면 ie8에서 상태 코드 0이 발생합니다. 즉, 그러한 설정을 허용하지 않는 것 같습니다.


이 오류의 원인을 알고 있다고 생각합니다.

Google 크롬에는 Google 크롬 확장 프로그램에 대한 ddos ​​공격을 방지하는 기능이 내장되어 있습니다.

Ajax 요청이 500 개 이상의 상태 오류를 지속적으로 리턴하면 요청을 조절하기 시작합니다.

Hence it is possible to receive status 0 on following requests.


In an attempt to win the prize for most dumbest reason for the problem described.

Forgetting to call

xmlhttp.send(); //yes, you need this pivotal line!

Yes, I was still getting status returns of zero from the 'open' call.


In our case, the page link was changed from https to http. Even though the users were logged in, they were prevented from loading with AJAX.


Observe the browser Console while making the request, if you are seeing "The Same Origin Policy disallows reading the remote resource at http ajax..... reason: cors header ‘access-control-allow-origin’ missing" then you need to add "Access-Control-Allow-Origin" in response header. exa: in java you can set this like response.setHeader("Access-Control-Allow-Origin", "*") where response is HttpServletResponse.


In my case, I was getting this but only on Safari Mobile. The problem is that I was using the full URL (http://example.com/whatever.php) instead of the relative one (whatever.php). This doesn't make any sense though, it can't be a XSS issue because my site is hosted at http://example.com. I guess Safari looks at the http part and automatically flags it as an insecure request without inspecting the rest of the URL.


문제 해결 에서이 AJAX xmlhttpRequest.status == 0은 클라이언트 호출이 아직 서버에 도달하지 않았지만 클라이언트 측의 문제로 인해 실패했음을 의미 할 수 있습니다. 응답이 서버에서 온 경우 상태는 1xx / 2xx / 3xx / 4xx / 5xx HTTP 응답 코드 중 하나 여야합니다. 따라서 문제 해결은 클라이언트 문제에 중점을 두어야하며 인터넷 네트워크 연결이 끊어 졌거나 위의 @Langdon에서 설명한 것 중 하나 일 수 있습니다.

참고 URL : https://stackoverflow.com/questions/2000609/why-is-ajax-returning-http-status-code-0

반응형