2010-04-17 4 views
1

요청한 파일의 다운로드 길이 (HTTP)가 다운로드시 실제 파일 길이 (크기)와 일치하지 않는 경험이 있습니까?ContentLength 대 실제 File.Length

+0

값이 -1 인 콘텐츠 길이를 제외하고는; 또는 내 경우에는 (소켓을 사용하여) 수신 된 헤더에서 컨텐츠 길이를 사용할 수 없습니다. – Jojo

+1

압축 된 데이터가 자동으로 디코딩되고 있습니까? 헤더 란 무엇입니까? –

+0

안녕하세요. Marc 님, 시나리오는 다음과 같습니다. 1. 다운로드 할 파일을 요청하십시오. HTTP 헤더에는 내용 길이가 1000입니다. 2. 파일이 다운로드됩니다. 실제 File.Length == 1005입니다. 이 시나리오가 가능합니까? 나는 단지 확인을 원한다. 나는 pdf 파일을 다루고있다. – Jojo

답변

1

콘텐츠 길이 헤더는 HTTP 응답의 본문에있는 바이트 수입니다.

이것은 모든 인코딩 단계 이후에 계산되며, 대부분의 인코딩 방법은 길이를 변경합니다.

  • 압축은
  • 자료 (64)을 증가 축소됩니다.

콘텐츠 길이 헤더는 소켓에서 읽을 원시 데이터의 양에 대해서만 유용합니다. 디코딩 된 내용을 보관하기 위해 버퍼를 할당하는 것은 도움이되지 않습니다.

(난 그냥 아래로 데이터를 가져하지만 응답 스트림이 점진적으로 버퍼가 아닌 하나 개의 큰 읽기를 할당 확대를 읽어야하는 몇 가지 코드를 작성했습니다.)

+0

실제 다운로드 한 파일 길이가 콘텐츠 길이 헤더와 같지 않을 수도 있습니다. – Jojo

+0

Base64는 HTTP에서 사용되지 않습니다. –

+0

@Jojo : correct. – Richard

0

방법 당신 문구 질문은 잘못된 것입니다.

HTTP 응답에 콘텐츠 길이 헤더가있는 경우 은 메시지 길이 인입니다. 기간. 음, HEAD 응답은 제외.

서버가 그 이상을 전송하면 서버가 손상됩니다.

+0

그래서 "message"의 길이입니다 ("message"는 여기에 PDF 파일이 될 수 있습니다). HTTP 헤더를 기반으로하는 content-length 값이 다운로드 된 경우 (로컬 파일 크기 또는 FileInfo.Length) 해당 PDF 파일의 파일 크기와 같지 않을 수 있습니까? – Jojo

+0

Content-Encoding (예 : gzip)과 함께 보낸 파일의 경우 Content-Length는 * compressed * 크기를 나타냅니다. 브라우저와 같은 수신자가 자동으로 압축을 풀면 예, 결과 파일이 (대부분의 경우) 더 커집니다. 네가 왜 묻고 있는지 정교하게 만들어야 할지도 모르겠다. –

관련 문제