首页 > 解决方案 > Rails 6 - 在 POST 上依赖 204(无内容)让 Jquery 在后台创建记录时更新同一页面是否安全?

问题描述

背景:在 Rails 5+ 中,没有关联 View 的 POST 路由现在只向浏览器返回 204 状态代码(而不是像 Rails 5 之前那样引发 ActionView::MissingTemplate 异常)。据我了解,它告诉所有浏览器“留在同一页面上”。

出于用户体验的原因,当用户单击“提交”时,它会在某个表单上发布表单数据,并且还会触发 Jquery 对页面进行一些更新。

虽然它似乎在开发和生产中都可以正常工作,但是将表单提交返回 204 并在页面上包含 jQuery 更新信息是否有任何不利影响?

标签: ruby-on-railshttp-status-code-204

解决方案


据我了解,它告诉所有浏览器“留在同一页面上”。

这是不正确的。204 只是服务器告诉客户端“我按照你的要求做了,但我没有更多可以告诉你的”。它不会“告诉浏览器停留在同一页面上” - 如果您阻止了默认操作(提交表单)并且正在发送异步(AJAX)请求,则浏览器将不会响应任何状态代码你回应。由您的 XHR 处理程序对响应执行任何操作。

如果您实际上提交了表单(同步)并得到了204 - No Content响应,浏览器将呈现一个空白页面或其中一个带有悲伤恐龙的错误页面。它实际上只有 3XX 重定向状态代码以及导致重定向的 Location 标头。

我会说 Rails 使用 204 作为默认值是相当不错的,但它并不是真正的正确响应。如果201 Created资源是立即创建的,或者202 Accepted资源是在后台创建的,则使用此选项。然而,这里的差异主要是语义上的,例如 jQuery 只是将所有非 4XX 和 5XX 等同于“好”响应代码,而其余的则触发错误。


推荐阅读