如何为 HEAD 请求定义 Rails 路由

Posted

技术标签:

【中文标题】如何为 HEAD 请求定义 Rails 路由【英文标题】:How to define Rails route for a HEAD request 【发布时间】:2021-12-17 09:44:45 【问题描述】:

我刚开始在我的日志中出现错误:

ActionController::RoutingError: No route matches [HEAD] "/auth/cas"

“/auth/cas”肯定有一条路由(虽然它被埋在 gem 中),但不是 HEAD 请求。这些错误与 UptimeRobot.com 访问我的服务器相吻合,但似乎他们刚刚开始使用 HEAD 请求,因为我最初设置我的帐户时没有收到这些请求。

由于我无法更改 UptimeRobot 的工作方式,并且我不想找到其他服务,我如何创建一个路由来处理此请求或以其他方式使其消失?

Rails 路由指南中没有关于如何处理 HEAD 请求的内容。

【问题讨论】:

只需使用另一个路由/URL 来监控正常运行时间。一个在你的控制之下,而不是“埋在宝石中”。 正常运行时间监视器被重定向到身份验证页面,并且(显然)不是获取它,而是首先对其进行 HEADing。所有 URL 都需要身份验证。我想创建一个不需要身份验证但决定的权力不值得我花时间的“心跳”页面——即使你和我知道这时间很短,对他们来说听起来工作量太大了,他们想要 FEATURES DAMMIT——所以我正在寻找更快的解决方案。 【参考方案1】:

Rails 没有内置 head routing helper。但是你可以定义一个路由来匹配任何可以想象到的 HTTP 方法与他们在掩护下使用的match method:

match "/auth/cas", to: "foos#bar", via: :head

【讨论】:

添加 headoptions 会是一个不错的 PR。

以上是关于如何为 HEAD 请求定义 Rails 路由的主要内容,如果未能解决你的问题,请参考以下文章

Rails:如何为 Rails activerecord 模型中的属性创建默认值? [复制]

如何为快捷方式应用自定义 SiriKit 意图扩展以请求允许访问?

Rails:如何为 AWS Elasticbeanstalk 应用程序获取 puma 3.11?

如何为一元 rpc 定义响应标头

NestJS 的自定义路由装饰器

已解决 - 如何为 Spring 中的 WebSocket 升级请求自定义 HTTP 响应?