2024年Clojure状态调查!中分享您的想法。

欢迎!有关如何工作的更多信息,请参阅关于页面。

+1

嗨!我在使用Ring进行重定向时遇到了问题。如果我在POST方法的页面上,重定向会保留它。如何强制所有的重定向都使用GET?提前感谢您。

1 答案

+2

选定
 
最佳答案

请至少分享一些无效的代码。

我们经常在处理POST请求的处理程序中,使用ring.util.response/redirect从新URL转发,这些新URL是GETs。这基本上是重定向工作的定义,因为它产生一个Location:标题,浏览器随后会使用它来GET指定的URL。


编辑
你的说法是对的,使用环形重定向是有效的,

ring.util.response/redirect

但如果我用状态码307,就会用POST方式进行重定向

(-> (response/redirect url)
       (assoc :session (-> req :session))
       (assoc :status 307))

难道不应该这样工作吗?
我不确定你在问什么,抱歉。

状态码307应该告诉浏览器在新位置URL上再次使用相同的HTTP方法(因此如果使用POST /url1并发送Location /url2与状态码307,则浏览器应该执行POST /url2)。

如果您希望重定向为GET,则不要使用状态码307。
我已经回答了。感谢您的帮助!
...