12

我在我的应用程序中收到 HEAD 请求,并想知道处理它们的最佳方式。选项是:

  • 将它们转换为 GET,正常处理 GET,然后:
    • 剥离身体(虽然我不确定如何 -response.content = ''似乎没有这样做。
    • 似乎应用程序引擎会自动剥离正文,并发出警告“丢弃意外正文以响应 HEAD 请求”

看起来这很干净,并且可以使用装饰器或中间件很好地编写。

  • 专门处理每个 HEAD 请求:
    • 这意味着我可以避免在某些(很多?)情况下访问 DataStore。
    • 显然,这种方法会阻止设置 Content-length 标头的中间件这样做的风险。

还要别的吗?我应该做什么?在这里使用 App Engine 有什么不同吗?是否有微妙的细节;如果是这样,是否有合适的中间件可以使用?要转换为 GET,`request.method = "GET" 是否足够(似乎有效)?

4

1 回答 1

14

您是否打算让您的应用程序处理 HEAD 请求,或者这些请求来自某个匿名来源?您当然没有义务遵守 HEAD 请求。您可以返回状态码 405(不允许使用方法),并为 Allow 标头提供 GET 或您要处理的任何内容。

我认为手动将 request.method 设置为 GET 没有意义;很可能,您只是返回了比请求者想要的更大的响应。他们只是想查看响应的标题。如果您不想处理 HEAD,请执行 405 和 Allow 标头方法。

通常,客户端会发送 HEAD 请求,因为他们试图在不需要时不处理完整响应。他们正在检查自上次看到响应以来 Content-Length 是否发生了变化,或者他们希望看到 Last-Modified 或 Expires 标头。

优雅地处理 HEAD 请求对于您的应用程序来说当然是表现良好的,但您不必这样做。

于 2009-12-30T01:36:25.080 回答