我正在阅读 RFC 8601 (https://datatracker.ietf.org/doc/html/rfc8601) 并尝试理解 Authentication-Results 标头的语法。 但是,我无法理解
result
的 methodspec
。
以下是我收到的电子邮件:
Authentication-Results: mx.google.com;
dkim=pass [email protected] header.s=scph header.b=SlxltaO2;
spf=pass (google.com: domain of [email protected] designates 147.253.216.74 as permitted sender) [email protected];
dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=uber.com
在上述情况下,标题可以细分如下:
authserv-id
:mx.google.com
authres-version
:未在标题中指出resinfo
:标题中的三个树脂信息
methodspec
method
:dkim
result
:pass
reasonspec
:未注明propspec
:[email protected]
、header.s=scph
、header.b=SlxltaO2
methodspec
method
:spf
result
:pass
reasonspec
:未注明propspec
:[email protected]
methodspec
method
:dmarc
result
:pass
reasonspec
:未注明propspec
:header.from=uber.com
问题:
什么是
(google.com: domain of [email protected] designates 147.253.216.74 as permitted sender)
和(p=QUARANTINE sp=QUARANTINE dis=NONE)
?
根据 RFC 8601、RFC 5321 和 RFC 5234,
result
的 methodspec
定义如下。
所以 result
的 methodspec
只能是字母、数字和 -
。
result = Keyword
Keyword = Ldh-str
Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig
Let-dig = ALPHA / DIGIT
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39 ; 0-9
我预计它们是
result
的methodspec
的一部分,但是,由于(google.com: domain of [email protected] designates 147.253.216.74 as permitted sender)
和(p=QUARANTINE sp=QUARANTINE dis=NONE)
包含符号和空格,它们不应该是result
的methodspec
。
我认为它们可能是
reasonspec
或propspec
,但是,它们不遵循reasonspec
和propspec
的语法。
resinfo
被定义为 [CFWS] ";" methodspec [ CFWS reasonspec ] [ CFWS 1*propspec ]
,如果它们不是 methodspec
、reasonspec
或 propspec
,那么它们是什么?它们在 RFC 的哪一部分中定义?
括号中的元素是注释,根据 RFC5322 第 3.2.2 节,RFC8601 继承自:
括号内的字符串被视为注释
因此,在解释标头之前应将它们从标头值中剥离,这就是 RFC8601 第 2.1 节 所讨论的内容:
标头字段的值(删除注释后)包含 身份验证服务标识符、可选版本,然后是 一系列的陈述和支持数据。
请注意,注释可以嵌套,因此如果您尝试使用正则表达式删除/提取它们,请务必小心,因为表达式需要递归。
顺便说一句,一个写得很好的问题!