“Warning”头字段被用来携带关于可能没有反映在状态码中的消息状态或转型的额外信息。此信息通常用于警告缓存操作或应用于消息负载的转换可能导致的错误。

    Warning可以被用作其他目的,可以是缓存相关的也可以是其他的。告警的使用而不是错误状态码,将这些反应与真正的失败区分开来。

    Warning头字段通常可以被应用于任何消息,但是一些警告码是特定于缓存的并且只可以被用于响应消息。

    1. Warning = 1#warning-value
    2. warning-value = warn-code SP warn-agent SP warn-text
    3. [ SP warn-date ]
    4. warn-code = 3DIGIT
    5. warn-agent = ( uri-host [ ":" port ] ) / pseudonym
    6. ; the name or pseudonym of the server adding
    7. ; the Warning header field, for use in debugging
    8. ; a single "-" is recommended when agent unknown
    9. warn-text = quoted-string
    10. warn-date = DQUOTE HTTP-date DQUOTE

    可以在一个响应中生成多个告警(可以由源服务器生成或由缓存生成),包括多个带有相同告警码但告警文本不同的告警。

    接收到一个或多个Warngin头字段的用户代理应该尽可能将他们全部告知用户,按照他们出现在响应中的顺序。生成多个Warning头字段的发送者被鼓励以这个用户代理行为进行排序。生成新的Warning头字段的发送者必须在任何已存在的Warning头字段之后添加他们的头字段。

    Warning被分配了三位告警码。第一个数字表明这个Warning是否被要求在验证后从一个已存储响应中删除:

    • 1xx 告警码描述了响应的新鲜度或验证状态,所以他们必须在验证后从缓存中删除。他们只可以当验证一个缓存条目的时候被缓存生成,并且不得在任何其他场合生成。
    • 2xx 告警码描述了一个没有被验证纠正的表示的一些方面(例如,表示的有损压缩),并且他们不得在校验后被从缓存中删除,除非要给完整的响应被发送,在这种情况下,他们必须被删除。

    如果一个发送者在一个消息中生成一个或多个1xx告警码,这个消息将被发往一个已知的只实现了HTTP/1.0的接收者,那么发送者必须在每个相应的警告值中包含与消息中的Date头字段匹配的警告日期。例如:

    1. HTTP/1.1 200 OK
    2. Date: Sat, 25 Aug 2012 23:34:45 GMT
    3. Warning: 112 - "network down" "Sat, 25 Aug 2012 23:34:45 GMT"

    Warning具有随同的描述了错误的告警文本,例如,用于日志记录。这只是咨询的,并且它的文本不影响告警码的解释。

    如果一个使用,评估或展示Warngin头字段的接收者接受了一个与相同消息中的Date值不同的告警日期,接收者必须在存储、转发或使用那个消息前排除那个告警值。这允许接收者排除在缓存验证后不当保留的告警值。如果所有告警值都被排除,接收者必须也排除Warning头字段。

    下列的告警码由本规范定义,每一个都由一个建议的英文文本,以及它的含义的描述。定义额外告警码的程序被描述在7.2.1节。