Linux/Linux 실습

[Linux] HTTP Method 정리 : GET/POST 방식

GGkeeper 2021. 11. 9. 00:36

실습> GET / POST 방식 알아보기

Client -> Server 요청할 때 

GET 방식  : 변수와 값이 HTTP Message의 Header에 붙여서 전송하는 방식
              주로 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드이다. 만약에 GET요청이 성공적으로 이루어진다면 XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴한다. 에러가 발생하면 주로 404 (Not found) 에러나 400 (Bad request) 에러가 발생한다.

HTTP 명세에 의하면 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다. 따라서 이런 이유로 사용하면 안전하다고 간주된다. 즉, 데이터의 변형의 위험없이 사용할 수 있다는 뜻이다. 게다가 GET 요청은 idempotent하다. 즉, 같은 요청을 여러 번 하더라도 변함없이 항상 같은 응답을 받을 수 있다. 그러므로 GET을 데이터를 변경하는 등의 안전하지 않은 연산에 사용하면 안된다.
POST 방식 : 변수와 값이 HTTP Message의 Boby에 담아서 전송하는 방식
                주로 새로운 리소스를 생성(create)할 때 사용된다. 조금 더 구체적으로 POST는 하위 리소스(부모 리소스의 하위 리소스)들을 생성하는데 사용된다. 성공적으로 creation을 완료하면 201 (Created) HTTP 응답을 반환한다. POST 요청은 안전하지도 않고 idempotent하지도 않다. 다시 말해서 같은 POST 요청을 반복해서 했을 때 항상 같은 결과물이 나오는 것을 보장하지 않는다는 것이다. 그러므로 두 개의 같은 POST 요청을 보내면 같은 정보를 담은 두 개의 다른 resource를 반환할 가능성이 높다.



GET 방식은 일반적인 링크를 클릭할 때 주로 쓰이고 
POST 방식은 로그인으로 중요 정보를 전송할 때와 
Server에서 응답하는 Response Data에 웹페이지 정보를 Body에 담아서 전송한다.

GET 방식은 전송량이 제한이 되어 있다.
경로 길이는 2,048자 까지 제한하고 이는 GET과 POST 모두 동일하지만
POST 방식은 데이터를 Body에 담아서 전송하므로 POST방식에 전송량은 제한이 없다.

PHP에서 전송방식으로 데이터를 받을 때의 형식
GET  방식으로 넘어온 값을 출력하는 형식 : $_GET['변수명']
POST 방식으로 넘어온 값을 출력하는 형식 : $_POST['변수명']


1. get 방식
get.html -> get.php  GET 방식으로 데이터를 전송한다.
# cd /var/www/html
# vi get.html

<html>
 <head>
   <meta charset="utf8">
   <title> ::: get 방식 테스트 ::: </title>
 </head>

<body>

<center> GET 방식 <br>
<form method=GET action=get.php>
userid : <input type=text name=userid> <br>
userpw : <input type=password name=userpw> <br>
<input type=submit value=로그인>
</form>
</center>

</body>
</html>


http://192.168.108.3/get.html


get.html 에서 userid, userpw 부분에 값을 넣고 로그인 버튼을 클릭한다.
# vi get.php
<html>
 <head>
   <meta charset="utf8">
   <title> ::: GET 방식 테스트 ::: </title>
 </head>

<body>

<center> GET 방식으로 전송한 값 <br>
userid : <?php echo $_GET['userid']?> <br>
userpw : <?php echo $_GET['userpw']?>
</center>

</body>
</html>

브라우저에 출력된 결과는 아래와 같다.
주소창은 GET 방식으로 넘어간 형태로 출력된다.
http://192.168.108.3/get.php?userid=abc&userpw=0000

GET 방식으로 전송한 값
userid : abc
userpw : 0000


http://192.168.108.3/get.php?userid=admin&userpw=P%40ssw0rd

GET 방식으로 전송한 값
userid : admin
userpw : P@ssw0rd



2. post 방식
post.html -> post.php  POST 방식으로 데이터를 전송한다.
# cp get.html post.html
# cp get.php post.php

# vi post.html
<html>
 <head>
   <meta charset="utf8">
   <title> ::: POST 방식 테스트::: </title>
 </head>

<body>

<center> GET 방식 <br>
<form method=POST action=post.php>
userid : <input type=text name=userid> <br>
userpw : <input type=password name=userpw> <br>
<input type=submit value=로그인>
</form>
</center>

</body>
</html>


# vi post.php
<html>
 <head>
   <meta charset="utf8">
   <title> ::: POST 방식 테스트 ::: </title>
 </head>

<body>

<center> POST 방식으로 전송한 값 <br>
userid : <?php echo $_POST['userid']?> <br>
userpw : <?php echo $_POST['userpw']?>
</center>

</body>
</html>

http://192.168.108.3/post.html

브라우저에 출력된 결과는 아래와 같다.
주소창은 POST 방식으로 넘어간 형태로 출력된다.
http://192.168.108.3/post.php

GET 방식으로 전송한 값
userid : abc
userpw : 0000

http://192.168.108.3/post.php

GET 방식으로 전송한 값
userid : admin
userpw : P@ssw0rd