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


139

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

답변:


110

다른 경우 :

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


9
이것을 지적 해 주셔서 감사합니다. 양식 제출이 ajax 호출을 취소 할 수 있음을 브라우저로 새로 고침 할 수 있다는 것을 알게되었습니다.
Magnus Smith

1
그냥하세요<form onsubmit="return false;">
Heitor

1
@Heitor의 제안이 나를 위해 일했습니다. 제 양식의 "제출"버튼이 페이지를 새로 고치는 동안 "제출"버튼을 클릭했을 때 자바 스크립트가 아약스 호출을 실행하려고했습니다. 결과는 아약스 호출이 취소되었습니다이었다
닉 Scozzaro을

이봐, 난 그리워e.preventDefault();
SparK

97

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

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

1
연결이 거부되면 가져옵니다. 예를 들어 Visual Studio로 사이트를 디버깅 할 때 디버깅 세션을 중지하면 연결을 시도한 모든 요청에 ​​net :: ERR_CONNECTION_REFUSED가 표시되고 상태 코드는 0이됩니다. 제공해야 할 서버에 연결할 수 없으면 상태 코드를 가질 수 없으므로 의미가 있습니다.
Triynko

확인할 수 있습니다. 웹 서버를 종료 한 후 status == 0입니다.
9ilsdx 9rvj 0lo

'교차 사이트 스크립팅'으로 인해 오류가 있습니다. 어떻게해야합니까?

1
@nasimjahednia lookup CORS ... 액세스하려는 서버는 도메인에서 사이트 간 스크립팅을 허용해야합니다.
Langdon

혼란 스러워요. HTTP 오류 코드를 반환 할 방법이 없습니까? 이것은 여기에 많은 다른 경우입니다 (415, 404 등?)
Edwin Evans

8

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


1
빙고!! 누구나 왜 이것을 설명 할 수 있습니까?
Jorge

3
기본적으로 HTML 버튼 유형은 '제출'이므로 클릭하면 양식 데이터 제출이 시도됩니다. 클릭 동작을 실행 한 다음 제출을 시도합니다. 'button'유형을 사용하면 더 이상 기본 유형이 아니며 onclick 만 수행합니다.
Christophe Roussy

7

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


이 경우 Chrome은 현재 시간이 초과 될 때까지 요청을 "중지됨"상태로 둡니다. 이는 해당 서버의 이전 요청에서 리턴 된 Strict-Transport-Security 플래그로 인해 발생 하거나 요청과 함께 전송되는 쿠키 의 Secure / HttpOnly 플래그 일 수 있습니다 .
Shane Hughes

7

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


4

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


새벽 나는 내가 이것에 다시 걸렸다는 사실을 싫어한다! <form onsubmit="return false;">트릭을했다.
Heitor

3

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


3

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

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


1
jQuery.ajax()XHR 객체에 문제가 있다고 지적했습니다 . 요청은 AJAX 호출에서도 생성되지 않았지만 여전히 f.open을 얻는 것은 함수 및 상태 코드 0이 아닙니다. 원인 : $.ajaxSettings.xhr에서 객체를 $.ajaxSetup({xhr})반환하고 new window.XMLHttpRequest();대신 반환 하여 문제를 해결했습니다
klimpond


2

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


2

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으로 중단되었습니다.


2

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


2

이 경우 페이지 링크가 https 에서 http 로 변경되었습니다 . 사용자가 로그인했지만 AJAX를 사용하여로드하지 못했습니다.


흥미 롭군 내 사건이 있기를 바랍니다. 내 iframe이 https로 열리고 결과적으로 성공하면 http로 아약스를 보낸 다음 상태 0을 얻습니다.
sonic

1

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


1

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

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


1

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

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

아약스 요청이 지속적으로 500 개 이상의 상태 오류를 반환하면 요청을 조절하기 시작합니다.

따라서 다음 요청에서 상태 0을 수신 할 수 있습니다.


1

설명 된 문제에 대한 가장 멍청한 이유로 상을 받으려고합니다.

전화 잊어

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

예, 'open'호출에서 상태 반환 값이 여전히 0입니다.


1

제 경우에는 Safari Mobile에서만이 기능을 사용하고있었습니다. 문제는 상대 URL (whatever.php) 대신 전체 URL ( http://example.com/whatever.php )을 사용하고 있다는 것 입니다. 내 사이트가 http://example.com에 호스팅되어 있기 때문에 XSS 문제가 될 수는 없습니다 . Safari는 http 부분을보고 나머지 URL을 검사하지 않고 안전하지 않은 요청으로 자동 플래그 지정합니다.


1

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


0

"동일한 오리진 정책이 http ajax에서 원격 리소스를 읽을 수 없습니다. 이유 : cors header 'access-control-allow-origin'missing"이 표시되면 요청하는 동안 브라우저 콘솔을 관찰하십시오. 응답 헤더에 "Access-Control-Allow-Origin"을 추가하십시오. 예 : 자바에서는 response.setHeader ( "Access-Control-Allow-Origin", "*")와 같이 설정할 수 있습니다. 여기서 응답은 HttpServletResponse입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.