[php] Chrome net :: ERR_INCOMPLETE_CHUNKED_ENCODING 오류

지난 2 개월 동안 Chrome 개발자 콘솔에서 다음 오류가 발생했습니다.

net::ERR_INCOMPLETE_CHUNKED_ENCODING

조짐:

  • 페이지가로드되지 않습니다.
  • 잘린 CSS 및 JS 파일.
  • 페이지가 걸려 있습니다.

서버 환경 :

  • 아파치 2.2.22
  • PHP
  • 우분투

이것은 사내 Apache 서버에서 발생합니다. 다른 사용자에게는 일어나지 않습니다. 즉, 이 문제를 경험 한 사용자가 없으며 개발자 팀의 다른 사람도 없습니다.

다른 사람들은 정확히 동일한 버전의 Chrome을 사용하여 동일한 서버에 액세스하고 있습니다. 또한 모든 확장 프로그램을 사용 중지하고 시크릿 모드에서 탐색을 시도했지만 아무런 효과가 없습니다.

Firefox를 사용했는데 정확히 같은 일이 발생합니다. 잘린 파일 및 기타 파이어 폭스는 콘솔 오류를 발생시키지 않기 때문에 파이어 버그를 통해 HTTP 요청을 검사하여 문제를 확인해야합니다.

Apache의 응답 헤더 :

Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:close
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Mon, 27 Apr 2015 10:52:52 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:Apache/2.2.22 (Ubuntu)
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Powered-By:PHP/5.3.10-1ubuntu3.8

테스트하는 동안 htaccess 파일에서 HTTP 1.0을 강제 실행하여 문제를 해결할 수있었습니다.

SetEnv downgrade-1.0

이것은 문제를 제거합니다. 그러나 HTTP 1.1보다 HTTP 1.0을 강제하는 것은 적절한 해결책이 아닙니다.

업데이트 :이 문제가 발생하는 유일한 사람이므로 클라이언트 측 문제인지 여부를 조사하는 데 더 많은 시간을 할애해야한다고 생각했습니다. Chrome 설정으로 이동하여 “기본값으로 복원”옵션을 사용하면 약 10-20 분 동안 문제가 사라집니다 . 그런 다음 돌아옵니다.



답변

확인. 나는 이것을 세 번 테스트했으며 100 % 확신합니다. 안티 바이러스 (ESET NOD32 ANTIVIRUS 5)에 의해 발생하고 있다고 합니다.

실시간 보호를 비활성화 할 때마다 문제가 사라집니다. 오늘은 실시간 보호를 6-7 시간 동안 끈 상태로 두었지만 문제가 발생하지 않았습니다.

몇 분 전에 문제가 1 분 이내에 나타나도록 다시 켰습니다.

지난 24 시간 동안, 나는 실시간 보호를 다시 켜고 끈다. 매번-결과는 같습니다.

업데이트 : 카스퍼 스키 안티 바이러스에서 실시간 보호와 동일한 문제를 겪은 다른 개발자를 만났습니다. 그는 그것을 비활성화하고 문제가 사라졌습니다. 즉이 문제는 ESET에만 국한되지 않습니다.


답변

페이지를 전송하는 중에 Chrome이 차단되었다는 오류가 발생했습니다. 귀하의 문제는 이유를 파악하려고합니다.

분명히 이것은 몇 가지 버전의 Chrome에 영향을 미치는 알려진 문제 일 수 있습니다. 내가 알 수있는 한,이 버전이 전송되는 청크의 내용 길이와 해당 청크의 표현 된 크기에 크게 민감한 문제입니다 (나는 그 중 하나에서 멀리 떨어져있을 수 있음). 요컨대, 약간 불완전한 헤더 문제가 있습니다.

반면에 서버가 터미널 0 길이 청크를 보내지 않을 수 있습니다. 로 고칠 수 있습니다 ob_flush();. Chrome (또는 연결 또는 무언가)이 느려질 수도 있습니다. 따라서 연결이 닫히면 페이지가 아직로드되지 않았습니다. 왜 이런 일이 일어날 지 모르겠습니다.

편집증 프로그래머는 다음과 같이 대답합니다.

<?php
    // ... your code
    flush();
    ob_flush();
    sleep(2);
    exit(0);
?>

귀하의 경우에는 스크립트 시간이 초과되었을 수 있습니다. 왜 그것이 당신에게만 영향을 미치는지 잘 모르겠지만 많은 경쟁 조건에 처할 수 있습니까? 그것은 완전히 추측입니다. 스크립트 실행 시간을 연장하여이를 테스트 할 수 있어야합니다.

<?php
    // ... your while code
    set_time_limit(30);
    // ... more while code
?>

Chrome 설치를 업데이트해야하는 것처럼 간단 할 수도 있습니다 (이 문제는 Chrome에만 해당됨).

업데이트 : PHP (동일한 로컬 호스트에 있음)가 버퍼링출력 하는 동안 치명적인 오류가 발생했을 때이 오류를 마침내 복제 할 수있었습니다. . 나는 출력이 너무 많이 엉망이되어 많은 용도로 사용하기에 충분하지 않다고 생각합니다 (헤더는 거의 없지만 내용은 거의 없거나 전혀 없음).

특히, 실수로 PHP가 포기할 때까지 실수로 코드를 재귀 적으로 호출했습니다. 따라서 서버는 터미널 0 길이 청크를 보내지 않았습니다. 이는 이전에 확인한 문제였습니다.


답변

나는이 문제가 있었다. 이 질문에 대한 대부분의 다른 답변을 시도한 후에 그것을 추적했습니다. 이는 디렉토리 의 소유자 및 권한으로 인해 발생했으며 /var/lib/nginx특히 /var/lib/nginx/tmp디렉토리가 올바르지 않습니다.

tmp 디렉토리는 fast-cgi에서 응답이 생성 될 때 특정 크기 이상인 경우에만 응답을 캐시하는 데 사용됩니다. 따라서이 문제는 간헐적이며 생성 된 응답이 큰 경우에만 발생합니다.

nginx <host_name>.error_log권한 문제가 있는지 확인하십시오 .

수정하려면 소유자와 그룹 /var/lib/nginx및 모든 하위 디렉토리가 nginx인지 확인하십시오.


답변

다음은 모든 클라이언트에 대해 수정해야합니다.

//Gather output (if it is not already in a variable, use ob_start() and ob_get_clean() )    

// Before sending output:
header('Content-length: ' . strlen($output));

그러나 제 경우에는 다음이 더 나은 옵션이었고 수정했습니다.

.htaccess :

php_value opcache.enable 0


답변

OMG, 5 분 전에 같은 문제를 해결했습니다. 나는 해결책을 찾기 위해 몇 시간을 보냈다. 처음에는 안티 바이러스를 비활성화하면 Windows의 문제가 해결되었습니다. 그러나 바이러스 백신이없는 다른 Linux PC에서 문제를 발견했습니다. nginx 로그에 오류가 없습니다. 나는 uwsgi“깨진 파이프”에 대해 뭔가를 보여 주었지만 모든 요청에 ​​대해 그렇지는 않았다. 무엇을 알고? 장치에 남은 공간이 없었습니다. 데이터베이스 로그에서 서버를 다시 시작할 때 발견하고 df승인했습니다. 안티 바이러스가 해결 된 이유에 대해서만 설명하면 브라우저 캐싱을 막을 수 있지만 (모든 요청을 확인해야 함) 이상한 동작이있는 브라우저는 단순히 잘못된 응답을 무시하고 캐시 된 응답을 표시 할 수 있습니다.


답변

내 경우에는 /usr/local/var/run/nginx/fastcgi_temp/3/07/0000000073" failed (13: Permission denied)아마도 Chrome net :: ERR_INCOMPLETE_CHUNKED_ENCODING 오류가 발생했을 수 있습니다.

/usr/local/var/run/nginx/nginx 를 제거 하고 다시 만들도록했습니다.

$ sudo rm -rf /usr/local/var/run/nginx/
$ sudo nginx -s stop
$ sudo mkdir /usr/local/var/run/nginx/
$ sudo chown nobody:nobody /usr/local/var/run/nginx/
$ sudo nginx


답변

알려진 Chrome 문제입니다. Chrome 및 Chromium 버그 추적기에 따르면 이에 대한 보편적 인 해결책은 없습니다. 이 문제는 서버 유형 및 버전과 관련이 없으며 Chrome에 있습니다.

이 문제 Content-Encodingidentity해결하기 위해 헤더를 설정 하면 나에게.

에서 developer.mozilla.org

정체성 | 식별 기능을 나타냅니다 (예 : 압축 및 수정 없음).

따라서 경우에 따라 Chrome에서 gzip 압축을 올바르게 수행하지 못할 수도 있습니다.