如果“always headers response table”包含2xx,它怎么不能是“onsuccess”的超集?

问题描述 投票:0回答:1

apache官方文档说:

• “onsuccess(默认)”响应标头表 → 仅适用于 2xx 响应
• “始终” 响应头表 → 适用于所有响应,包括 2xx

后来又说:

always 不是 onsuccess 的超集

如果“always headers response table”包含2xx,它怎么不能是“onsuccess”的超集?

apache
1个回答
0
投票

您错过了声明的重要部分

always 不是 onsuccess 的超集 相对于现有的 headers:

这有点令人困惑,但如果您阅读链接到它的文档,就会解释它。

onsuccess 和always 之间的这种差异是由于httpd 在内部存储HTTP 响应标头的方式而产生的,因为它不提供任何“标准化”的单个标头列表。

示例

这是我尝试使文档中的示例更加清晰:

第 1 步 - 您的申请

   response.status = 200
   response.headers['X-Foo'] = 'bar'
   return response

第2步:mod_proxy

mod_proxy sets headers in the always table and not in the default onSuccess table

apache 头表:
|永远|成功| |--------------|-----------------| |

x-Foo: bar
| |

第 3 步:mod_headers

Header onSuccess set X-Foo: baz

apache 头表:

永远 成功
x-Foo: bar
X-Foo: baz

第4步:服务器响应

HTTP/1.1 200 
 Server: apache
 x-Foo: bar
 X-Foo: baz

总结

这就是文档所说的原因

always 不是 onsuccess 的超集 相对于现有标头

还有那个

在某些情况下,在这两个条件下重复此指令是有意义的

再次从示例中,您可以通过以下方式解决问题:
mod_headers

Header onSuccess unset X-Foo
Header always      set X-Foo: baz
© www.soinside.com 2019 - 2024. All rights reserved.