HTTP 리다이렉션과 메서드 변경

dev | 2024-03-02

POST 액션으로 항목을 생성을 하고 생성된 항목의 상세페이지로 리다이렉션을 시켰는데 작동하지 않았다. 맨날 쓰던 기능이 왜 작동하지 않는지 봤더니 아무 생각없이 복사해온 HTTP 코드 307(Temporary Redirect)이 문제였다.

리다이렉션을 할 때 메서드가 변경되는 경우도 있고 유지되는 경우도 있는데 307은 메서드와 바디가 유지되면서 이동되기 떄문에 원하는대로 작동하지 않은 것이었다. POSTPUT 다음에 GET으로 페이지 이동을 할 때에는 303(See Other)이 적절하다고 한다. GET이 아닌 다른 메서드는 GET으로 변경되고 바디는 없어진다.

옛날에는 서버측 리다이렉션은 클라이언트가 전혀 관여하지 않는 줄 알았는데 그런건 아니다. <meta> 리다이렉션은 사용할 때 약간의 죄책감이 들었는데 서버에 대한 제어권이 없을 때 사용하라고 한다. 자바스크립트 리다이렉션은 우선순위가 가장 낮기도 하고 브라우저의 뒤로 가기 버튼이 막히기 때문에 되도록 사용하지 않는 것이 좋다. 리다이렉션 루프에 빠지면 서버가 500을 반환하곤 하는데 그렇지 못 하더라도 요즘은 브라우저들이 리다이렉션 루프를 감지하고 오류 메시지를 보여준다고 한다.

Comments

    Post a comment

    :

    : 공개 되지 않습니다. Gravatar를 표시 합니다.

    :

    : HTML 태그를 사용할 수 없습니다.