HTTP标头是否对空格/大小写/顺序敏感?

时间:2019-05-08 18:59:43

标签: http ssl http-headers hsts

让我们假设我有这些标题:

Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload

出于编写正则表达式的目的,我需要知道:

标头对空间敏感吗?例如max-age=<expire-time> vs. Max-age=<expire-time> 他们区分大小写吗?例如max-age= <expire-time> vs. Max-age=<expire-time> 他们对订单敏感吗?例如max-age=<expire-time>; preload vs. preload; max-age=<expire-time>;

2 个答案:

答案 0 :(得分:1)

回答此类问题的来源是标准-这就是标准的含义。引用RFC 7230 section 3.2

  

每个标题字段均包含一个不区分大小写的字段名称,      冒号(“:”),可选的前导空格,字段值和      可选的尾随空白。

对于字段值,这取决于实际的标题。例如Set-Cookie中的值区分大小写。对于Strict-Transport-Security,您必须查看相关标准。在RFC 6797 it says in section 6.1中:

  
      
  1. 指令的出现顺序不重要
      ...
  2.   
  3. 指令名称不区分大小写。
  4.   

答案 1 :(得分:0)

您应该阅读相关的RFC规范。

通常为HTTP Header names are case insensitive,并且不应包含空格。 HTTP/2 goes further and states that HTTP Header names should be lower case,还有white space there causes errors

HTTP标头值 可以区分大小写,具体取决于标头。对于Strict-Transport-Security标头your questions are covered in that RFC,具体来说:

  

它基于Section 2 of [RFC2616]中定义的通用语法(其中包括“隐含线性空白”的概念,也称为“隐含* LWS”)。

基本上,这意味着空格并不重要。

然后,HSTS RFC继续说:

  
      
  1. 指令的出现顺序不重要。
  2.   
     

...

     
      
  1. 指令名称不区分大小写。
  2.