HTTP Methods in Flask

HTTP Methods

참고문서


HTTP는 특정 URL에 접속할 때 메소드를 구분한다. Flask의 route는 GET 메소드를 기본값으로 두고 있다.
그러나 route() 데코레이터에 원하는 메소드 값을 명시하는 것으로 GET이외의 Request에도 대응할 수가 있다.

from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        do_the_login()
    else:
        show_the_login_form()

메소드 목록에 GET이 있으면 HEAD가 자동으로 추가됩니다.
또한 HEAD 요청이 HTTP RFC (HTTP 프로토콜을 설명하는 문서)로 처리되므로 HTTP 사양의 해당 부분을 완전히 무시할 수 있습니다.
마찬가지로 OPTIONS 역시 자동으로 구현됩니다.

HTTP 메소드 간단 정리

HTTP 메소드는 클라이언트가 현재 페이지에서 어떤 일을 하기 원하는지 서버에게 전해주는 역할을 합니다.

다음은 일반적으로 사용되는 메소드에 대한 설명입니다.

GET
아마 가장 많이 사용되는 method로 서버에서 정보를 가져오는 기능을 할 수 있습니다.

HEAD
이 메소드 역시 GET 메소드와 마찬가지로 정보를 가져오는 기능이지만, 헤더에 있는 정보만 가져옵니다.
Flask 사용시 굳이 구현할 필요는 없습니다. Werkzeug 라이브러리를 통해 HEAD 정보를 다룰 수 있습니다.

POST
정보를 저장할 때 사용하는 메소드로 보통 HTML forms 태그가 서버로 데이터를 전달할 때 사용되곤 합니다.

PUT
POST와 유사한 메소드로 저장하는 과정에서 사용되는 메소드입니다.
차이점은 POST의 경우 한 번 요청을 보내면 새로운 페이지가 뜨거나 페이지가 새로고침 되는 반면, PUT은 두 번 이상 서버로 데이터를 전송할 수 있습니다.
이미 보내진 값에 덮어쓰기가 이뤄집니다. 다음과 같은 환경에서 PUT 메소드가 유용하게 사용됩니다.
전송 중 인터넷 연결상태가 나쁜 경우, 두 번 이상 서버로 전송을 시도해야 할 때 PUT 메소드는 브라우저와 서버 사이의 시스템을 깨뜨리지 않습니다.
반면 POST는 한 번만 트리거되어야하기 때문에 불가능합니다.

DELETE
해당 URL의 정보를 지우는데 사용됩니다.

OPTIONS
현재 URL이 어떤 종류의 메소드를 지원하는지 클라이언트에게 제공합니다. XHTML1, HTML4는 현재 GET, POST만 지원합니다.
그렇다면 다른 메소드를 사용하기 위해서 어떻게 해야할까요? Javascript를 사용해 다른 메소드를 사용해도 되고, 최신 HTML 표준을 사용하면 위에 언급된 다른 메소드를 사용할 수 있습니다.
HTTP 프로토콜의 사용량은 점점 늘어나고, 다양한 방식으로 사용되기 때문에 브라우저만이 HTTP의 유일한 사용자가 아닙니다.