prosource

리소스를 로드하지 못했습니다. net::ERR_CONTENT_LENGTH_MISMATCH

probook 2023. 10. 20. 13:50
반응형

리소스를 로드하지 못했습니다. net::ERR_CONTENT_LENGTH_MISMATCH

이 오류 메시지의 의미와 해결 방법은 무엇입니까?그것은 Windows 7에서 Google Chrome v33.0의 콘솔에서 나온 것입니다.

리소스를 로드하지 못했습니다. net::ERR_CONTENT_LENGTH_MISmatch http://and.img.url/here.png

이미지를 바꾸려고 합니다.srcj를 지정Query를 사용하여 속성을 지정합니다.예를 들어, 다음과 같습니다(간소화).

$('.image-prld').attr('src', someDynamicValue);

그 페이지에는 약 30개의 이미지가 있습니다.그리고 페이지를 다시 로드할 때마다 위 오류가 발생하고 있습니다.하지만 때로는 모든 이미지에 대해 오류 없이 잘 작동합니다.

이 오류가 발생하면 특정 이미지가 다음과 같이 표시됩니다.

enter image description here

그러나 새 탭에서 오류 메시지 옆에 있는 링크를 열면 이미지가 로드되고 있는데, 이는 이미지가 유효하고 존재한다는 논리적인 의미입니다.

도커 + NGINX

제 상황에서는 nginx 도커 컨테이너 디스크 공간이 문제였습니다.10GB의 로그를 가지고 있었는데 이 양을 줄이면 됩니다.

단계별(신입/초보용)

  1. 컨테이너에 입력:docker exec -it <container_id> bash

  2. 예를 들어 로그로 이동합니다.cd /var/log/nginx.

  3. [선택사항] 파일 크기 표시:ls -lh개별 파일 크기 또는du -h폴더 크기의 경우.

  4. 이( 빈 > file_name.

  5. 됩니다.

고급 개발자/sys 관리자용

다음으로 nginx 로그를 비웁니다.> file_name또는 유사한.

도움이 되길 바랍니다.

이 오류는 HTTP 헤더에 보급된 데이터와 유선을 통해 전송된 데이터 간에 분명히 일치하지 않는 것입니다.

다음과 같은 결과가 나올 수 있습니다.

  1. 서버: 서버에 내용을 변경하지만 헤더의 내용 길이를 업데이트하지 않거나 제대로 작동하지 않는 특정 모듈에 버그가 있는 경우.Node HTTP Proxy의 경우입니다(여기 참조).

  2. 프록시: 사용자와 서버 간의 프록시는 요청을 수정할 수 있으며 컨텐츠 길이 헤더는 업데이트할 수 없습니다.

제가 알기로는 IIS에서는 그런 문제를 보지 못했지만 대부분 맞춤형 코드로 작성되었습니다.

그게 도움이 된다면 저에게 알려주세요.

그것은 심지어 당신의 광고 차단기에 의한 것일 수도 있습니다.

이미지를 사용하지 않도록 설정하거나 이미지를 가져온 도메인에 대해 예외를 추가합니다.

이는 전체 디스크(Ubuntu/Nginx)로 인해 발생할 수 있습니다.

내 상황:

  • Nginx에서 정적 파일 ".../static/js/vendor.c4ed7962fb4a63ad3c3b.js net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)"
  • 루트 디스크가 가득 찼습니다. tmp 파일을 정리한 후 오류가 사라졌습니다.
  • 예방: 디스크가 깨끗한지 확인합니다(이와 같은 스크립트가 도움이 될 수 있습니다:https://crunchify.com/how-to-automatically-delete-tmp-folders-in-linux-automatic-disk-log-cleanup-bash-script/ )

제 경우에는 헤더에 광고한 Content-Length를 잘못 계산하고 있었습니다.파일의 범위 요청을 처리하는 중에 파일 크기를 Content-Length로 잘못 게시했습니다.

브라우저로 다시 보내던 실제 범위에 Content-Length를 설정하여 문제를 해결했습니다.

그래서 일반적인 요청에 응답하는 경우에는 Content-Length를 파일 크기로 설정합니다.range-request에 응답하는 경우 Content-Length를 요청된 range의 실제 길이로 설정합니다.

이것이 저에게 효과가 있었던 것입니다.

        proxy_buffer_size   1M;
        proxy_buffers   4 1M;

nginix proxy.conf 파일에서 위 파라미터의 크기를 늘렸습니다.여기서 nginix는 마이크로서비스 기반 애플리케이션의 프록시 역할을 하고 있습니다.

제 경우에는 (Fiddler를 사용하여) 헤더를 추가하도록 요청을 수정하고 있었습니다.https요청하지만 https 트래픽을 해독하도록 구성하지 않았습니다.수동으로 만든 인증서를 Fiddler에서 내보낼 수 있으므로 브라우저에서 인증서를 신뢰하거나 가져올 수 있습니다.자세한 내용은 위 링크를 참조하십시오. 몇 가지 단계는 다음과 같습니다.

  1. [도구] > [피들러 옵션]을 누릅니다.
  2. HTTPS 탭을 클릭합니다.HTTPS 트래픽 암호 해독 확인란이 선택되어 있는지 확인합니다.
  3. [바탕 화면으로 Fiddler Root Certificate 내보내기] 단추를 누릅니다.

당신의 서버의 디스크 공간이 나에게 작동했던 로그 폴더를 지우는 것과 관련이 작업을 수행하십시오.

1. go to nginx log directory
   cd /var/log/nginx
2. delete all the older log
   rm *.gz               
3. emplty error log
   truncate -s 0 error.log.1 
4. empty access log
   truncate -s 0 access.log.1

제 경우에는 프록시 문제(nginx에서 varnish cache로 프록시 요청)로 인해 문제가 발생했습니다.프록시 정의에 다음을 추가해야 했습니다.

        proxy_set_header Connection keep-alive; 

여기서 답을 찾았습니다. https://stackoverflow.com/a/55341260/1062129

이것이 도커와 관련된 경우, 잘못된 컨테이너를 멈추고 다음을 사용하여 새 컨테이너를 시작해 보십시오.docker run동일한 이미지의 명령입니다.

도커 + nginx를 사용하여 해당 문제를 해결하는 사람이 있다면 권한이 될 수 있습니다.오류가 표시된 Nginx 로그:

2019/12/16 08:54:58 [crit] 6#6: *23 open() "/var/tmp/nginx/fastcgi/4/00/0000000004" failed (13: Permission denied) while reading upstream, client: 172.24.0.2, server: test.loc, request: "GET /login HTTP/1.1", upstream: "fastcgi://172.28.0.2:9001", host: "test.loc"

nginx 컨테이너 내에서 실행(경로는 달라질 수 있음):

chown -R www-data:www-data /var/tmp/nginx/

입니다.docker system prune -a나를 위해 속임수를 썼답니다.저는 제 컨테이너를 다시 조립하거나 @mrroot5의 답변을 따르는데 운이 따르지 않았습니다. 비슷한 결과를 얻을 수 있었던 것 같습니다.

프로젝트 폴더가 Google Drive 또는 OneDrive 폴더에 있고 코드에서 호출하는 프로젝트 파일 중 하나가 아직 온라인 상태(로컬 복사본은 아직 다운로드되지 않았습니다)인 경우에도 이 오류가 발생합니다.코드에 접근할 수 있도록 모든 프로젝트 파일에 로컬 복사본이 다운로드되었는지 확인합니다.

언급URL : https://stackoverflow.com/questions/23521839/failed-to-load-resource-neterr-content-length-mismatch

반응형