Turbo-Rails 앱의 HTTP 리디렉션
Rails에서 컨트롤러 작업의 일반적인 리디렉션은 다음과 같습니다.
def create
# ...
redirect_to root_path
end
그러면 HTTP 상태 코드가
302 Found
인 응답이 전송됩니다.그러나 Turbo docs 에는 문제가 발생하지 않는 한 양식 제출에 대한 응답이
303 See Other
이어야 한다고 명시되어 있습니다.그 이유는
302 Found
에 대한 spec 상태로 리디렉션된 요청이 원래 요청과 동일한 HTTP 메서드를 사용해야 한다는 것입니다. 레거시 이유 때문에 대부분의 브라우저에서 fetch
(내부적으로 Turbo에서 사용) 구현은 리디렉션된 경로에 302 Found
요청을 발행하여 POST
요청의 GET
응답에 응답합니다. 다른 모든 HTTP 메서드의 경우 리디렉션 시 원래 요청과 동일한 메서드를 사용합니다.303 See Other
상태로 응답하면 리디렉션에 사용되는 방법이 항상 GET
입니다.def create
# ...
redirect_to root_path, status: :see_other
end
Rails 양식은
GET
및 POST
의 두 가지 브라우저 기본 메서드만 사용하기 때문에 리디렉션 코드가 있는 이 이상 현상은 Rails에서 큰 문제가 아닙니다. 메소드가 다른 양식은 숨겨진 필드로 삽입된 메소드와 함께 사용하도록 렌더링됩니다POST
. 그러면 요청이 컨트롤러에 도달하기 전에 Rails에서 구문 분석됩니다.예를 들어:
<%= form_with(url: posts_path, method: :put) do |form| %>
<%= form.text_field :name %>
<%= form.submit %>
<% end %>
렌더링합니다
<form action="/posts" accept-charset="UTF-8" method="post">
<input type="hidden" name="_method" value="put">
<input type="hidden" name="authenticity_token" value="...">
<input type="text" name="name" id="name">
<input type="submit" name="commit" value="Save">
</form>
그러나 이것은 Rails가 Turbo와 더 밀접하게 통합됨에 따라 잠재적으로 변경될 수 있습니다.
302
리디렉션이 문제가 될 수 있는 몇 가지 사용 사례가 이미 있습니다.Turbo는 정의될 때
formmethod
속성에 지정된 방법을 사용하여 양식을 제출합니다. 아래 양식은 PUT
요청을 사용하여 제출합니다.<%= form_with(url: posts_path) do |form| %>
<%= form.text_field :name %>
<%= form.submit formmethod: :put %>
<% end %>
컨트롤러가
302 Found
를 사용하여 리디렉션한 경우 리디렉션된 경로에 대한 또 다른 PUT
요청이 발생합니다.Turbo는 양식 제출을 가로채기 때문에
<form>
및 method
뿐만 아니라 GET
의 POST
속성에서 모든 HTTP 메서드를 사용할 수 있습니다. 이 양식은 또한 PUT
와 함께 제출됩니다.<form action="/posts" accept-charset="UTF-8" method="put">
<input type="text" name="name" id="name">
<input type="submit" value="Save">
</form>
Rails 양식 도우미는 이것을 렌더링하지 않지만 무엇이 가능한지 아는 것이 좋습니다!
따라서 Rails 앱에서 Turbo를 사용할 때 항상
303 See Other
상태 코드로 리디렉션하는 것이 좋습니다.이 게시물이 마음에 든다면 내 책The Rails and Hotwire Codex을 확인하여 Rails 및 Hotwire 기술을 레벨 업하십시오!
Reference
이 문제에 관하여(Turbo-Rails 앱의 HTTP 리디렉션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ayushn21/http-redirects-in-a-turbo-rails-app-43jc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)