1.先说一下我这边的使用场景。就是客户端使用服务端的接口下载文件。服务端这边是直接获取二进制然后输出的。请问除了echo 二进制以外还有没有更合理的返回方式。
2.用PHP header('Content-Length: '.strlen($Download));设置Content-Length,这个设置实际上无效的吗?因为照理来说的话,本身http请求会根据输出的大小来设置Content-Length。即使我设置改变了 最终请求的Content-Length还是根据实际的大小。
3.还有一个问题就是比如我请求一个 10M的文件的二进制。用浏览器请求的话压根没有Content-Length这个头返回。用客户端那边请求能正常返回Content-Length。Content-Length的返回跟请求的方式也有关系?
소스가 바이너리 스트림인가요?
1. 파일인 경우 실제 경로를 숨기려면 다음 방법을 시도해 보세요.
readfile($filename)
이echo
readfile($filename)
比echo
效率高或者使用
X-SendFile
技术如果的确是二进制流,也可以尝试先缓存成文件了 然后
X-SendFile
2,
header
设置Content-Length
是有效的,返回真实的大小即可。这个在一些下载软件比较重要,比如迅雷。它会检测最终大小是否符合
Content-Length
3, 浏览器会以
Content-Length
为参照,但是当网络很糟糕的时候,超时、断流了,浏览器也会停止下载,最终得到的是一个不完整的文件,这个下载国外软件的时候很常见。
如果实际大小超过了
Content-Length
,浏览器也接受。4, 所以即使没有
또는Content-Length
보다 더 효율적입니다.X-SendFile
기술을 사용하세요🎜 🎜실제로 바이너리 스트림인 경우 먼저 파일에 캐시한 다음X-SendFile
🎜을 시도해 볼 수도 있습니다. 🎜2,header
설정Content-Length
가 유효합니다. 실제 크기를 반환하면 됩니다. 이는 Thunder와 같은 일부 다운로드 소프트웨어에서 더 중요합니다.최종 크기가
Content-Length
🎜를 준수하는지 확인합니다. 🎜3. 브라우저는Content-Length
를 참조로 사용하지만네트워크 상태가 매우 좋지 않아 시간이 초과되거나 끊어지면 브라우저도 다운로드를 중지하고 종료됩니다. up with는 잘못된 전체 파일입니다. 이는 외국 소프트웨어를 다운로드할 때 매우 일반적입니다.
실제 크기가
Content-Length
를 초과하는 경우 브라우저에서도 이를 허용합니다. 🎜 🎜4, 따라서 반환된Content-Length
가 없더라도 브라우저는 계속 다운로드할 수 있습니다. 서버 연결이 끊어지면 브라우저는 다운로드를 종료합니다. 🎜