Ruby中URI.open与open获取同一URL文件大小结果不同的原因
问题原因解析
这俩方法返回的文件大小不一样,核心是它们处理HTTP响应的默认行为存在差异,具体细节如下:
open是Ruby内核(Kernel模块)自带的方法,引入open-uri后只是扩展了它支持URI资源的能力,但默认不会自动解码服务器返回的gzip压缩内容;URI.open是URI模块专门提供的URI资源读取方法,默认会自动识别并解压服务器返回的gzip压缩内容。
Reddit的服务器会给请求返回gzip压缩后的页面内容,所以:
open拿到的是原始压缩后的字节数据,size显示的是压缩后的文件大小;URI.open会自动完成解压操作,拿到的是解压后的纯文本内容,size自然比前者大。
你可以通过打印两者的响应头验证这一点,能看到响应头里的Content-Encoding: gzip字段,对比解压前后的大小就能完全对应上差异。
内容的提问来源于stack exchange,提问作者The Observation Deck Developer
相关产品推荐
相关产品推荐

