HTTP 리다이렉션과 메서드 변경
dev | 2024-03-02
POST
액션으로 항목을 생성을 하고 생성된 항목의 상세페이지로 리다이렉션을 시켰는데 작동하지 않았다. 맨날 쓰던 기능이 왜 작동하지 않는지 봤더니 아무 생각없이 복사해온 HTTP 코드 307
(Temporary Redirect)이 문제였다.
리다이렉션을 할 때 메서드가 변경되는 경우도 있고 유지되는 경우도 있는데 307
은 메서드와 바디가 유지되면서 이동되기 떄문에 원하는대로 작동하지 않은 것이었다. POST
나 PUT
다음에 GET
으로 페이지 이동을 할 때에는 303
(See Other)이 적절하다고 한다. GET
이 아닌 다른 메서드는 GET
으로 변경되고 바디는 없어진다.
옛날에는 서버측 리다이렉션은 클라이언트가 전혀 관여하지 않는 줄 알았는데 그런건 아니다. <meta>
리다이렉션은 사용할 때 약간의 죄책감이 들었는데 서버에 대한 제어권이 없을 때 사용하라고 한다. 자바스크립트 리다이렉션은 우선순위가 가장 낮기도 하고 브라우저의 뒤로 가기 버튼이 막히기 때문에 되도록 사용하지 않는 것이 좋다. 리다이렉션 루프에 빠지면 서버가 500
을 반환하곤 하는데 그렇지 못 하더라도 요즘은 브라우저들이 리다이렉션 루프를 감지하고 오류 메시지를 보여준다고 한다.
Comments