是否有必要在我的响应头中设置Content-Length?

Jos*_*eph 8 vb.net http response download

我正在审查一些遗留代码,我发现了一个导致响应无限期的错误.

这是基本的想法:

Response.Content-Type = "application/octet-stream"
Response.AddHeader("Content-Disposition", "attachment; filename" & someFileName)
Response.AddHeader("Content-Length", someStoredLength)
Response.BinaryWrite(someByteArray)
Response.Flush()
Response.End()
Run Code Online (Sandbox Code Playgroud)

问题是someStoredLength比someByteArray的实际大小大得多,所以客户端只是坐在那里等待文件下载,而浏览器只是旋转.

我正在考虑删除指定内容长度的AddHeader,因为当我这样做时,一切似乎工作正常,但我担心我不理解某些东西.

我可以删除这个AddHeader,还是应该找到一个更好的方法来解决这个问题?

Ben*_*n S 10

你的应用程序应该(向下滚动到Content-Length)来定义它,但是,它并不是严格要求的.

以下是对可能选项的讨论.

  • 链接文章中提出的解决方案("只是将长度设置为某个可能太大的任意值")似乎是一个非常糟糕的主意.即使它不会破坏当前用户代理的任何内容,它也会破坏"Content-length"标头的整个概念,并且可能会破坏不常见但完全符合标准的HTTP客户端库.如果事先不知道文件的大小,则应在所有情况下使用分块传输编码(如果要重用连接,则必须使用(保持活动)). (2认同)

Ste*_*hen 8

将Content-Length行更改为以下内容:

Response.AddHeader("Content-Length", someByteArray.Length.ToString())
Run Code Online (Sandbox Code Playgroud)