PHP에서 echo를 사용하여 큰 바이너리 문자열을 HTTP 응답으로 출력할 때 서버가 잘못된 응답을 반환했습니다.
P粉328911308
P粉328911308 2023-08-28 10:26:38
0
1
491
<p>다음 코드를 사용하여 일부 대규모 바이너리 배열을 HTTP 응답으로 출력하려고 합니다. </p> <pre class="brush:php;toolbar:false;">$bin = NULL; $strLenToOutput = 8000; for ($i=0; $i < $strLenToOutput; $i++) { $bin .= pack("C", 1); } header('콘텐츠 설명: 파일 전송'); header("콘텐츠 유형: 애플리케이션/옥텟 스트림"); header("콘텐츠 처리: 첨부 파일; 파일 이름=test.bin"); header("콘텐츠 길이: 파일 크기=" . strlen($bin)); header("캐시 제어: no-cache"); 에코 $bin;</pre> <p>출력할 문자열이 8000 이하로 비교적 짧은 경우 위 코드는 정상적으로 작동합니다. 그러나 문자열 길이가 8001로 늘어나면 Postman에서 다음 오류가 발생합니다. </p> <pre class="brush:php;toolbar:false;">분석 오류: 서버가 잘못된 응답을 반환했습니다</pre> <p>Apache V2.4.46에서 PHP7.4를 실행하고 있으며 모든 설정이 기본값입니다. </p> <p>내가 여기서 뭘 잘못하고 있는 걸까요? 변경해야 하는 것이 PHP 코드입니까, 아니면 Apache2의 일부 설정입니까? </p> <p>안내해 주시기 바랍니다. 미리 감사드립니다. </p> <p>업데이트: 파일 길이를 설정하는 다음 줄을 제거하면 PHP 코드가 제대로 작동합니다. 문제는 PHP가 이 부분을 스스로 처리하도록 해야 한다는 것입니다. </p> <pre class="brush:php;toolbar:false;">//header("Content-Length: filesize=" . strlen($bin));</pre></p>
P粉328911308
P粉328911308

모든 응답(1)
P粉966335669

문제는 Content-Length 헤더가 설정되는 방식입니다. 원래 코드는 헤더를 설정합니다

으아악

다음과 같이 설정해야 합니다:

으아악

헤더의 추가 텍스트 "filesize="는 클라이언트의 응답 구문 분석을 혼란스럽게 할 뿐입니다. Content-Length가 8000보다 작거나 같으면 클라이언트가 복구할 수 있는 방법이 있을 수 있지만 Content-Length가 8001보다 크거나 같으면 상황을 처리할 수 없습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!