POST 메서드란?
CGI 프로그램에 정보를 전달하는 방법 중 일반적으로 더 안정적인 방식은 POST 메서드입니다. POST는 GET 방식과 동일한 형태로 정보를 패키징하지만, URL의 물음표(?) 뒤에 텍스트 문자열을 붙여 전송하는 대신 별도의 메시지로 전송한다는 점이 다릅니다. 이 메시지는 표준 입력(standard input)의 형태로 CGI 스크립트에 전달됩니다.
GET 방식은 URL에 데이터가 그대로 노출되어 길이 제한이 있고 보안에 취약한 반면, POST 방식은 요청 본문(body)에 데이터를 담아 전송하므로 상대적으로 안전하고 대용량 데이터 전송에도 적합합니다. 따라서 비밀번호나 개인정보처럼 민감한 데이터를 다룰 때는 POST 방식을 사용하는 것이 좋습니다.
예제 코드
다음은 GET 방식과 POST 방식을 모두 처리할 수 있는 hello_get.py 스크립트입니다.
#!/usr/bin/python
# CGI 처리를 위한 모듈 임포트
import cgi, cgitb
# FieldStorage 인스턴스 생성
form = cgi.FieldStorage()
# 필드에서 데이터 가져오기
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"실행 결과
앞선 예제와 마찬가지로 HTML 폼과 제출(submit) 버튼을 사용하여 두 개의 값을 전달해 보겠습니다. 이번에도 동일한 CGI 스크립트인 hello_get.py가 입력값을 처리합니다.
<form action = "/cgi-bin/hello_get.py" method = "post"> First Name: <input type = "text" name = "first_name"><br /> Last Name: <input type = "text" name = "last_name" /> <input type = "submit" value = "Submit" /> </form>
위 폼의 실제 실행 결과입니다. 이름(First Name)과 성(Last Name)을 입력한 후 제출 버튼을 클릭하면 아래와 같이 결과 화면을 확인할 수 있습니다.
