PHP POST와 GET 동작 원리 예제

이번 포스팅에서는 POST 함수에 대해 설명을 하도록 하겠습니다.

그리고 POST 함수와 GET 함수의 동작이 어떻게 다른지 직접 확인도 해보도록 하겠습니다.

 

POST 함수

POST 함수는 HTTP 함수 중 하나입니다.

GET 함수와 같이 입력한 내용을 서버에 전송할 수 있습니다.

GET 함수와 다른 점은 POST 함수의 경우에는 메세지 바디에 입력한 정보를 작성하여 리퀘스트를 합니다.

메세지 바디는 URL에 정보들이 보이지 않기 때문에 ID나 패스워드등 제3자에게 보여지만 안되는 정보들을 전송할 때 POST 함수를 이용합니다.

입력한 내용을 표시해주는 간단한 폼을 작성하여 동작을 확인해보도록 하겠습니다.

이름을 입력하고 전송 버튼을 누르면 check.php라는 페이지에 이동해 입력한 내용이 표시되도록 준비했습니다.

 

입력 화면 샘플 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>input</title>
</head>
<body>
<form method="post" action="check.php">
    <p>
        Name
        <input type="text" name="name">
    </p>
    <input type="submit" value="submit">
</form>
</body>
</html>

 

입력 화면에 작성한 <form method=”post” action=”check.php”>부분을 확인해보도록 하겠습니다.

이것은 <form>이라는 요소에 method와 action 이라는 속성을 설정했습니다.

action 속성은 어디로 데이터를 전송할 것이지를 의미하고, method 속성은 어떠한 방법으로 데이터를 전송할 것인지를 의미합니다.

위 샘플에서는 action 속성에 action=”check.php”라고 지정했습니다.

check.php에 입력한 데이터를 전송한다는 의미입니다.

method 속성은 HTTP 함수를 지정합니다.

HTML의 method 속성에는 get과 post 중 하나를 지정할 수 있습니다.

위에서는 POST 함수를 지정하였습니다.

 

출력 화면 샘플 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>check</title>
</head>
<body>
<?php
    $name = $_POST['name'];
?>
<p>Name <?php echo $name ?></p>
</body>
</html>

 

출력 화면에는 입력한 값이 저장되어있는 $_POST[‘name’]에서 값을 취득하여 $name이라는 변수에 대입해 출력하고 있습니다.

이름에 ponyo라고 입력하고 전송 버튼을 눌렀을 때의 리퀘스트 메세지와 리스폰스 메세지를 확인해보도록 하겠습니다.

 

리퀘스트 메세지

POST http://localhost:45612/check.php HTTP/1.1
Host: localhost:45612
Connection: keep-alive
Content-Length: 9
Cache-Control: max-age=0
Origin: http://localhost:45612
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://localhost:45612/
Accept-Encoding: gzip, deflate
Accept-Language: kr,en-US;q=0.8,en;q=0.6,ru;q=0.4,zh-CN;q=0.2,zh;q=0.2,fr;q=0.2,it;q=0.2,zh-TW;q=0.2,pt;q=0.2

name=ponyo

 

POST 함수이기 때문에 첫 번째 줄인 리퀘스트 코드에 입력한 내용이 생성되지 않을 것을 볼 수 있습니다.

헤더 아랫부분에 있는 메세지 바디에 입력한 내용인 name=ponyo가 생성돼있는 것을 볼 수 있습니다.

 

리스폰스 메세지

HTTP/1.1 200 OK
Content-Type: text/html
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-Powered-By: PHP/5.4.45
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcaGFrb3pha2lcRG9jdW1lbnRzXE15IFdlYiBTaXRlc1xwb3N0LWdldFxjaGVjay5waHA=?=
X-Powered-By: ASP.NET
Date: Sun, 2 Dec 2018 19:21:32 GMT
Transfer-Encoding: chunked

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>check</title>
</head>
<body>
<p>Name ponyo</p>
</body>
</html>

 

출력 화면에 이름 ponyo라고 되었습니다.

 

 

GET 함수

POST 함수를 GET 함수로 바꿔서 전송해보도록 하겠습니다.

리퀘스트 메세지

GET http://localhost:45612/check.php?name=ponyo HTTP/1.1
Host: localhost:45612
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://localhost:45612/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: kr,en-US;q=0.8,en;q=0.6,ru;q=0.4,zh-CN;q=0.2,zh;q=0.2,fr;q=0.2,it;q=0.2,zh-TW;q=0.2,pt;q=0.2

 

GET 함수이기 때문에 첫 번째 줄에 name=ponyo 라고 표시되고 있는 것을 확인 할 수 있습니다.

 

리스폰스 메세지

HTTP/1.1 200 OK
Content-Type: text/html
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-Powered-By: PHP/5.4.45
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcaGFrb3pha2lcRG9jdW1lbnRzXE15IFdlYiBTaXRlc1xwb3N0LWdldFxjaGVjay5waHA=?=
X-Powered-By: ASP.NET
Date: Sun, 2 Dec 2018 19:25:11 GMT
Transfer-Encoding: chunked

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>check</title>
</head>
<body>
<p>Name ponyo</p>
</body>
</html>

 

출력화면에 이름 ponyo라고 표시되었습니다.

POST 함수를 사용하거나 GET 함수를 사용하거나 같은 결과를 보여주기 때문에 리스폰스 메세지도 같습니다.

하지만 위에서 확인 했듯이 POST 함수를 사용하는 경우와 GET 함수를 사용하는 경우 리퀘스트 메세지 부분에서 어떠한 차이가 있는지 직접 확인을 할 수 있었습니다.

POST 함수와 GET 함수를 사용 할 때에 어떠한 것들이 차이가 있는지 확실히 알아 두고 사용 하도록 하겠습니다.

조금이나마 GET 함수와 POST 함수의 특성을 이해하는 대해 도움이 되었으면 좋겠습니다.

댓글