HTTPS协议文件完整性

gui*_*cgs 3 http file data-integrity

我知道当您使用HTTP/HTTPS协议将文件从客户端发送到服务器时,您可以保证所有成功发送的数据都到达目的地.但是,如果您发送一个巨大的文件,然后突然互联网连接断开,并非所有软件包都被发送,因此您将失去文件的逻辑完整性.

我的陈述中是否有任何意义?

我想知道目标节点是否有办法在不使用"自定义代码/ api"的情况下检查文件逻辑完整性.

Mar*_*ler 6

HTTPS只是TLS层上的HTTP,因此所有都适用于HTTPS:

HTTP通常通过TCP/IP传输.现在,TCP具有流控制(即,将重新发送丢失的分组),并且校验和(即,没有接收器注意并且重新请求分组数据被改变的概率很小).因此,如果您真的只是传输数据,那么基本上就是设置(只要您的HTTP服务器配置为以字节为单位发送文件的长度,至少对于静态文件,通常是这样).

如果在达到服务器发送给客户端的HTTP GET回复中公布的整个文件大小之前停止传输,则客户端将知道!许多HTTP库/客户端可以重新启动HTTP传输(如果服务器支持它).

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.15 甚至指定MD5校验和标题字段.您可以将Web服务器配置为使用该字段,客户端可以使用它来验证整体文件的完整性.

编辑:rfc2616指定的Content-MD5似乎已被弃用.您现在可以使用更灵活的内容摘要.

另外,您提到要检查客户端发送到服务器的文件.这个问题可能会有点困难 - 虽然您通常完全控制您的Web服务器,但您无法强制任意客户端(例如浏览器)在上传之前散列其文件.

另一方面,如果你实际上是控制客户端的HTTP实现,你很可能也会使用比普通HTTP更多的文件传输 - 想想WebDav,AtomPUB等,它们是HTTP的协议,或者甚至更多面向文件交换的协议,如rsync(如果您实际上正在同步内容,我会衷心推荐 - 如果双方版本仅部分不同,则会将网络使用量降至最低).如果出于某种原因,您的用户可以在明确定义的圈子中共享大部分数据(例如,您正在构建摄影师共享其相册的内容),您甚至可能只使用bittorrent, -chunk哈希,广泛的负载平衡选项,并允许"普通的旧HTTP种子".