Mozilla Firefox网络选项卡中Transferred和Size列的区别是什么?

33

我正在尝试确定"Transferred"和"Size"列之间的区别。这是否与压缩文件和未压缩文件之间的差异有关?

我没有在我的服务器(Node.js Express服务器)上压缩文件,所以我不知道为什么会有文件大小的差异。

输入图像描述


1
但你可以从中得到想法:对于Chrome https://dev59.com/fWsz5IYBdhLWcg3wLUt2。 - hassansin
1个回答

34

根据 Content-Encoding: gzip 标头显示,您的 Express 应用程序启用了 gzip 压缩,因此在发送到网络之前,响应正文将使用 gzip 进行压缩。传输大小是压缩后的大小,在浏览器中解压缩的大小。Express 在运行时执行此操作,因此即使文件在磁盘上未经压缩,也会在发送到网络之前进行压缩。

关于您的评论的跟进

您并没有发布任何代码,但您的 Express 应用程序很可能使用了 compression 中间件(可能来自您开始使用的模板)。如果是这样,该中间件将使用 mime-db 来确定响应内容类型是否可压缩。在 mime-db 中查找 application/javascript 可以发现它被标记为可压缩:

mimeDb['application/javascript']
{ source: 'iana',
  charset: 'UTF-8',
  compressible: true,
  extensions: [ 'js' ] }
请注意,这里没有涉及.gz文件扩展名。磁盘上没有.gz文件,压缩是针对内存中的.js文件进行的。另请注意,仅设置Content-Encoding: gzip头而不实际对正文进行gzip编码是不应该做的。这将导致客户端出现编码错误。

1
哦,你说得对,看起来Express默认就会进行gzip压缩。我不知道它会自动gzip .js资源文件。我原以为是我自己添加的,使用了app.get('*.gz', function(req,res,next){ res.set('content-encoding','gzip')}); - Alexander Mills
由于我对Express的正则表达式不是很熟悉,所以可能会出现正则表达式“*.gz”捕获.js文件的情况。 - Alexander Mills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接