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

Rails 6 - on a POST is it safe to rely on 204 (No Content) to let Jquery update the same page while a record is created in background?

背景:在 Rails 5+ 中,没有关联视图的 POST 路由现在只需 returns 向浏览器发送 204 状态码(而不是引发 ActionView::MissingTemplate 例外,如 Rails 5) 之前所做的那样。据我了解,它告诉所有浏览器“保持在同一页面上”。

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

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

Which, as far as I understand it, tells all browsers to "stay on the same page".

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

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

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