不确定这是否可行或是否有意义,但我正在尝试在设置 HTTP 标头字段后进行重定向。就像是:
request.headers['Accept'] = 'application/json'
redirect_to url
显然这不起作用,就像request
当前请求一样,而不是重定向。有什么方法可以调用redirect_to
自定义 HTTP 标头吗?
不确定这是否可行或是否有意义,但我正在尝试在设置 HTTP 标头字段后进行重定向。就像是:
request.headers['Accept'] = 'application/json'
redirect_to url
显然这不起作用,就像request
当前请求一样,而不是重定向。有什么方法可以调用redirect_to
自定义 HTTP 标头吗?
无论您使用什么语言或框架,都无法重定向到设置了自定义标题的页面。换句话说,没有办法触发 HTTP 重定向并导致客户端(浏览器)添加自定义标头。
正如您自己提到的,您正在为指示浏览器重定向的响应设置自定义标头,而不是为重定向本身。
站点指示浏览器发出带有自定义标头的 HTTP 请求的唯一方法是使用 Javascript 和XMLHttpRequest
对象。
使用响应对象...
如果您想为响应设置自定义标头,那么 response.headers 就是这样做的地方。headers 属性是一个将标头名称映射到它们的值的散列,Rails 会自动设置其中的一些。如果要添加或更改标头,只需将其分配给 response.headers 以这种方式:
response.headers["Content-Type"] = "application/pdf"
你不能直接做,但有一种间接的方法
redirect_to your_url, flash: { accept_header: 'application/json' }
然后检查目标 url 中的 flash[:accept_header]。
这不是特别优雅,但它有效。它类似于使用特殊的 url 参数 - your_url(accept_header: json) - 但它不会被用户/书签/等看到。