在HTTP签名中,我应该使用“请求行”还是“目标请求”?
我正在查看Readme.md作为Joyent的node-http-signature模块的一部分,它使用“特殊名称”将HTTP请求目标包含到签名库中:
要在签名计算中包含HTTP请求行,请使用特殊的请求行值。 虽然这在HTTP语言中重载了标题的定义,但是在RFC 2616中定义了请求行,并且在有用的签名计算中作为标题的exception值,简单地使用请求行比单独添加一个单独的参数更简单它。
包括request-line
意味着包括POST /url/path/here HTTP/1.1
文本到签名库。
相反,规范03草案说,使用不同的“特殊价值”来包含要求的目标:
如果头域名称是
(request-target)
则通过连接小写:方法,ASCII空间和:path伪头文件来生成头域值
是的,(请求 – 目标)在parens。
对于前者,请求的签名基础可能如下所示:
POST /foo HTTP/1.1 + "\n" date: Tue, 07 Jun 2011 20:51:35 GMT + "\n" content-type: application/json + "\n" content-md5: h0auK8hnYJKmHTLhKtMTkQ==
而对于后者,同一请求的签名基础将如下所示:
(request-target): POST /foo + "\n" date: Tue, 07 Jun 2011 20:51:35 GMT + "\n" content-type: application/json + "\n" content-md5: h0auK8hnYJKmHTLhKtMTkQ==
那么哪个是权威? 我怀疑是否有两种方法将path和path包含在签名库中。
我怀疑“实施规则”,但我想知道真正的意图。