100% 이후 Chrome에서 파일 다운로드 중

100% 이후 Chrome에서 파일 다운로드 중

오늘 뭔가를 다운로드했는데 1.8GB에 불과하다는 것을 알았지만 1.8/1.8GB를 다운로드한 후 가장 이상한 일이 일어났습니다. Chrome은 파일을 계속 다운로드했고 진행률 표시줄에 로딩 애니메이션이 표시되기 시작했으며 파일 크기는 2.5GB 이후에 중지될 때까지 계속 증가했습니다. 비디오 파일이었는데 내 디스크에 2.5GB라고 되어 있는데 재생도 안 되네요. 어떻게 이런 일이 일어나는 걸까요?

답변1

HTTP 프로토콜의 일부인 수많은 응답 헤더 중 하나가 헤더입니다 Content-Length. 이를 통해 서버는 응답으로 전송되는 데이터의 크기를 클라이언트에게 알릴 수 있습니다. 대부분의 현명한 브라우저와 마찬가지로 Chrome은 이 헤더를 사용하여 파일을 다운로드할 때 전체 파일 크기에 대해 표시할 항목을 결정하고 표시된 다운로드 진행률을 계산합니다.

하지만 여기에는 두 가지 문제가 있습니다.

  • 서버가 이 헤더를 보내도록 엄격하게 요구되는 것은 아닙니다(전체가 아닌 일부 상황에서만 필요함). 서버가 로컬 디스크에 있는 실제 파일에 대해 이를 보내지 않는 경우는 거의 없지만, 동적으로 생성되어 생성된 대로 전송되는 콘텐츠(예: 일부 클라우드 저장소에서 즉시 생성된 ZIP 아카이브)인 경우에는 드문 일이 아닙니다. 고객이 한 번에 파일 그룹을 다운로드할 수 있는 서비스)가 이 범주에 속합니다. 이런 일이 발생하면 Chrome은 실제 완료율 없이 다운로드 진행률을 표시하지만 다운로드가 계속되고 있음을 나타내는 일반적인 로딩 표시줄이 표시됩니다.
  • 호환성상의 이유로 헤더가 필요하지 않지만 어쨌든 전송되는 경우 응답 크기를 엄격하게 표시하는 대신 권고 정보로 처리해야 합니다. 이에 대해 여기에 나열할 이유가 너무 많지만, 결과적으로 리소스를 가져오거나 다운로드할 때 Chrome(및 대부분의 브라우저)은 이러한 경우 서버가 데이터 전송을 중지할 때까지 데이터를 계속 가져옵니다. 왜냐하면 리소스를 신뢰할 수 없기 때문입니다. 헤더에 표시된 내용이 정확합니다. 실제로 Chrome은 다운로드 시 보고된 파일 크기와 실제 파일 크기 간의 사소한 불일치를 숨깁니다.

귀하의 경우에 일어난 일은 두 번째 문제의 결과였습니다. '전체' 파일 크기에 도달하고 계속 데이터를 가져오자 Chrome은 결국 다운로드 중인 파일의 크기를 알 수 없을 때와 같은 내용을 표시하도록 전환했습니다. 이에 대해 염두에 두어야 할 두 가지 가능한 원인은 버그(서버 또는 일부 중개 시스템) 또는 악의적인 활동(이 경우 중간자 공격 또는 손상된 서버일 수 있음)입니다.

어느 쪽이든, 이는 비디오를 다운로드한 사이트의 소유자에게 보고되어야 합니다. 두 경우 모두 그들에게 나쁜 소식이 될 가능성이 높기 때문입니다.


참고로 Chrome이 로컬 디스크에 쓰는 것보다 더 빠르게 네트워크에서 전체 파일을 가져올 수 있는 경우 파일 크기가 증가하지 않고 이와 유사한 동작을 볼 수도 있습니다.

관련 정보