当前位置: 首页 > 知识库问答 >
问题:

使用具有相同值的重复响应头是否合适?

钮刚洁
2023-03-14

我发现一个响应,其中应用程序使用相同值的重复头。有谁能告诉我,这是一个好的编程实践,还是用于安全性或其他方面?

  
     HTTP/1.1 200 
     Accept-Ranges: bytes
     Cache-Control: no-cache, must-revalidate, private
     Content-Type: text/html
     Date: Mon, 20 Nov 2017 04:08:51 GMT
     Expires: 0
     Last-Modified: Thu, 16 Nov 2017 14:04:48 GMT
     Pragma: 
     Public-Key-Pins: pin-sha256="5w0XrTCAbsVO7vTngDViNHPutlvB43qYionPbpV2ky0=";  
     max-age=5184000; includeSubDomains;
     Server: Any
     Set-Cookie: ********************* httponly; secure; path=/
     Strict-Transport-Security: max-age=31536000 ; includeSubDomains
     Strict-Transport-Security: max-age=31536000; includeSubDomains
     X-Content-Type-Options: nosniff
     X-Content-Type-Options: nosniff
     X-Frame-Options: SAMEORIGIN
     X-Frame-Options: SAMEORIGIN
     X-XSS-Protection: 1; mode=block
     Content-Length: 559
     Connection: Close

此应用程序使用相同值的重复X-内容-类型-选项头、严格-传输-安全、X-框架-选项头。

共有1个答案

干鑫鹏
2023-03-14

这是编程/配置错误。RFC 7230(第3.2.2节)规定:

发件人不得在消息中生成具有相同字段名的多个报头字段,除非该报头字段的整个字段值被定义为逗号分隔的列表[,即#(值)]或者报头字段是众所周知的异常(如上所述)下面)。

因此,使用如下多个标题:

Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Strict-Transport-Security: max-age=31536000; includeSubDomains

是未定义的行为。同一节说:

收件人可以将具有相同字段名的多个标题字段组合成一个“字段名:字段值”对,而不改变消息的语义,方法是将每个后续字段值按顺序附加到组合字段值,并用逗号分隔。

因此,对上述标题的一种可能的解释是:

Strict-Transport-Security: max-age=31536000 ; includeSubDomains, max-age=31536000; includeSubDomains

根据https://www.rfc-editor.org/rfc/rfc6797#section-6.1,其语法无效并且可能被拒绝(并且结果是,不应用HSTS策略)。

请注意,并非所有实现都遵循此指定行为。例如,Python http库只返回一个标题列表,在上述情况下,它可能如下所示:

[
    # ...
    ('Strict-Transport-Security', 'max-age=31536000 ; includeSubDomains'),
    ('Strict-Transport-Security', 'max-age=31536000; includeSubDomains')
    # ...
]

根据实现情况,至少有以下三种行为是可能的:

  • 合并标题,用逗号分隔(由RFC 7230指定)

验证和使用之间的解释不匹配可能会导致攻击,尽管这对HSTS头来说可能不会很严重。

 类似资料:
  • 我有一个这样的对象数组: 我希望每个人(名字)都有一个对象,并添加他们的对象。 因此,最终阵列将是: 我使用的真正数组非常大,这就是为什么我正在寻找最有效的方法。

  • 目前,我有一个类分数,它允许我用三种不同的方式创建分数 对于一个整数,在这种情况下,给定的整数将是分子,分母将设置为1 有2个整数,分子和分母 最后一种方法是解析一个字符串,该字符串必须与REGEX-?\d/[1-9]\d* gcd将尽可能减少生成的分数。 我现在想实现的是,具有相同分子和分母的分数实例具有相同的引用例如。 应该返回true。 我研究了一些关于泛型和边界的章节,但我不确定这是否是我

  • 我有一个数据集,如下所示:

  • 如何检查数组中的所有元素是否相同? 这是我想到的唯一解决办法。我想知道有没有有效的?

  • API的成功响应具有json格式(基于avro模式)。对于错误,它是否应该为异常定义另一种格式(模式)?或者成功的响应应该包括错误部分?发生错误时,将其他部分留空,只填充错误。 这更像是一个内部应用编程接口,需要定义各种自定义异常消息。它是否应该对所有此类应用程序错误使用相同的HTTP状态代码? 这些决定如何影响OPEN API(SWAGGER)?

  • 问题内容: 我有两个数组:一个数组填充了来自ajax请求的信息,另一个数组存储了用户单击的按钮。我使用以下代码(我填写了示例编号): 但是,即使两个数组相同,但名称不同,它总是给出。(我在Chrome的JS控制台中对此进行了检查)。那么,有什么办法可以知道这两个数组是否包含相同的数组?为什么给?我怎么知道第一个数组中的哪个值不在第二个数组中? 问题答案: 请注意,这不会像以前的答案那样修改原始数组