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

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

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

  • 特别处理每个 HEAD 请求:
    • 这意味着我可以在某些(很多?)情况下避免数据存储访问。
    • 显然,这种方法存在一个风险,即设置 Content-length 标头的中间件将无法这样做。

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

有帮助吗?

解决方案

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

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

一般来说,客户端发送 HEAD 请求是因为他们试图明智地在不需要时不处理完整的响应。他们正在检查自上次看到响应以来 Content-Length 是否已更改,或者他们希望查看 Last-Modified 或 Expires 标头。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top