【问题标题】:Remove the Server response header in Yesod/Warp删除 Yesod/Warp 中的服务器响应标头
【发布时间】:2017-09-17 09:38:27
【问题描述】:

如何删除 Yesod 中的Server HTTP 响应标头?我找到了code that's responsible for setting that header,但我不知道下一步该做什么。我知道我可以使用addHeader "Server" "" 将标头值替换为空字符串,但我更愿意将其完全删除。

【问题讨论】:

    标签: haskell yesod haskell-warp


    【解决方案1】:

    我在 GitHub Warp 存储库上创建了an issue,他们将其更改为当服务器名称为空时,不发送“服务器”标头。因此,解决方案是使用setServerName "" 将服务器名称设置为空字符串。就我而言,我必须将其添加到Application.hs 中的warpSettings 函数中。请注意,您必须使用包含该修复程序的 Warp 版本(截至 17 年 5 月 3 日,它尚未发布,但您可以直接从 GitHub 拉取它)。

    【讨论】:

      【解决方案2】:

      您必须调用您链接的函数内部的方法。该函数将“如果 HTTP 响应标头中不存在日期和服务器标头,则添加该标头”,因此如果您不想要该行为,则需要重新实现它。

      这就是为什么人们总是说要保持代码模块化和函数小;这个函数对于你的用例来说太大了,并且没有特定的更小的函数可以完全满足你的需求(否则它会被这个函数调用!)

      【讨论】:

      • 呃,但这不是我的代码,所以我不能更改它,除非我自己制作这个库的版本。
      • @MichałPerłakowski 没错,您必须编写一个与该函数类似的函数,不同之处在于它按照您喜欢的方式处理标题。我在评论图书馆的糟糕设计迫使你这样做。
      • 我不能只“写一个函数”,因为它是一个内部模块中的一个内部函数,它使用其他内部函数。而且,我什至没有直接使用这个函数,因为我只是在使用 Yesod 而 Yesod 使用 Warp(这是这个函数所在的地方)。
      • 那你不能;它会违反该函数设置的不变量。如果 Warp 只暴露该部分,那么您只能使用该部分。您可以根据需要请求该功能(或自己编写),但我怀疑这样设计是有充分理由的。
      猜你喜欢
      • 2017-07-11
      • 2010-11-13
      • 2014-11-06
      • 2016-05-09
      • 1970-01-01
      • 2014-04-19
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多