common-crawl - 哪个块代表 WARC-Block-Digest?
问题描述
在下面的第 09 行有这一行:WARC-Block-Digest: sha1:CLODKYDXCHPVOJMJWHJVT3EJJDKI2RTQ
Line 01: WARC/1.0
Line 02: WARC-Type: request
Line 03: WARC-Target-URI: https://climate.nasa.gov/vital-signs/carbon-dioxide/
Line 04: Content-Type: application/http;msgtype=request
Line 05: WARC-Date: 2018-11-03T17:20:02Z
Line 06: WARC-Record-ID: <urn:uuid:e44bc1ea-61a1-4200-b94f-60042456f638>
Line 07: WARC-IP-Address: 54.230.195.16
Line 08: WARC-Warcinfo-ID: <urn:uuid:6d14bf1d-0ef7-4f03-9de2-e578d105d3cb>
Line 09: WARC-Block-Digest: sha1:CLODKYDXCHPVOJMJWHJVT3EJJDKI2RTQ
Line 10: Content-Length: 141
Line 11:
Line 12: GET /vital-signs/carbon-dioxide/ HTTP/1.1
Line 13: User-Agent: Wget/1.15 (linux-gnu)
Line 14: Accept: */*
Line 15: Host: climate.nasa.gov
Line 16: Connection: Keep-Alive
WARC的规格说The WARC-Block-Digest is an optional parameter indicating the algorithm name and calculated value of a digest applied to the full block of the record.
我一直在试图弄清楚full block of the record
指的是什么。是11到16行吗?还是 12 到 16 号线?还是第 1 到 16 行(没有第 9 行)?我已经尝试散列这些可能性,但无法获得上面的 sha1(base 32)值。
解决方案
HTTP GET 请求的 WARC 记录包含三个部分(参见WARC 规范):
- WARC 标头
- HTTP 请求标头
- 为空的有效负载(注意:POST 请求将包含非空有效负载)
记录的有效负载摘要是空字符串的 base32 编码 SHA-1。使用 Linux 命令行工具的证明:
$> echo -n "" | openssl dgst -binary -sha1 | base32
3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ
WARC 记录具有以下形式:
warc-record = header CRLF
block CRLF CRLF
(参见WARC 规范:记录模型)
“完整”块应包括直到尾随的所有内容\r\n\r\n
。这意味着第 11 到 17 行。注意:HTTP GET 请求也以\r\n\r\n
(尾随空行)结束:
$> cat request
GET /vital-signs/carbon-dioxide/ HTTP/1.1
User-Agent: Wget/1.15 (linux-gnu)
Accept: */*
Host: climate.nasa.gov
Connection: Keep-Alive
$> tail -n2 request | hexdump -C
00000000 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 4b 65 65 70 |Connection: Keep|
00000010 2d 41 6c 69 76 65 0d 0a 0d 0a |-Alive....|
0000001a
$> cat request | openssl dgst -binary -sha1 | base32
CLODKYDXCHPVOJMJWHJVT3EJJDKI2RTQ
推荐阅读
- sed - 使用 sed 替换位于其他两个数字之间的数字
- amazon-ec2 - 如何重用 puppet SSL 证书
- android - Appcelerator云重置密码默认页面,用户重置密码,没有任何反应
- java - 如何在 java 中从 10-JUN-02 01.57.07.848594000 PM 转换为 yyyy-MM-dd-HH24.MI.SS.FF6
- multithreading - 通过多线程完成的应用程序对执行时间的改进受到物理内核数量的限制?
- crystal-reports - Crystal Reports,将子报表链接到日期组
- mysql - MySQL表注释跨越多行
- java - 无法在 intellij 中导入 JavaFx
- python - 并发和 Selenium - 多处理与多线程
- docker - 无法启动 docker 守护进程(graphdriver 问题)