[HTML5] <form> 태그_GET과 POST


<form> 태그_GET과 POST


1. 서버, 클라이언트

폼을 이해하기 위해서는 우선 서버와 클라이언트라는 개념을 이해해야 한다. 서버는 정보를 제공하는 쪽이고, 클라이언트는 정보를 제공 받는 쪽을 의미한다. 

웹브라우저의 주소창에 생활코딩의 홈페이지인 http://opentutorials.org를 입력하면 웹브라우저는 opentutorials.org에 해당하는 컴퓨터에게 생활코딩 컨텐츠를 요청한다. 

이 맥락에서 웹브라우저는 정보를 요청하는 쪽 다시 말해서 제공 받는 쪽이기 때문에 클라이언트가 되고, opentutorials.org의 컨텐츠를 제공하는 컴퓨터는 정보를 제공하기 때문에 서버가 된다.


아래 그림은 서버와 클라이언트의 관계를 나타낸 것이다.



2. 폼 (form)

폼이란 사용자의 데이터를 서버에 전송하는 방법이다. 일반적으로 아래와 같은 작업을 하기 위해서는 폼을 이용한다.

- 로그인을 위해서 아이디/비밀번호를 입력할 때

- 회원가입을 하기 위해서 개인정보를 입력할 때

- 블로그나 게시판에 글을 작성하거나, 파일을 전송할 때


3. 문법

form의 문법은 아래와 같다. <form> 태그 안쪽에 텍스트를 입력 받는 텍스트 필드나, 원하는 항목을 선택 할 수 있는 라디오 버튼등이 위치한다. 

이러한 요소들을 컨트롤 (control)이라고 부른다. 사용자가 컨트롤을 조작한 후에 전송 버튼을 누르면 <form> 태그의 속성인 action에 기술된 URL로 사용자가 입력한 정보를 전송한다. 

서버는 이 정보를 받아서 저장하거나, 계산된 결과를 보여주는 등의 작업을 수행하게 된다.

<form action="서버로 전송한 데이터를 수신할 URL" method="데이터를 전송하는 방법">

    텍스트 필드, 라디오 버튼, 체크 박스와 같은 컨트롤을 생성하는 태그

</form>

- action : 사용자가 입력한 데이터를 전송할 서버의 URL

- method : 사용자가 입력한 데이터를 전송하는 방법으로 아래와 같은 방식이 있다.

get : action에 입력한 URL에 파라미터의 형태로 전송

post : header의 body에 포함해서 전송


4. GET과 POST의 차이점

(1) GET

- URL에 정보가 담겨서 전송된다.

- 전송할 수 있는 정보의 길이가 제한되어 있다.

- 퍼머링크로 사용될 수 있다.--> 정보를 식별하는 고유한 식별자.(고유한 주소체계)

- URL 상에 파라미터를 표현할 때에는 '?' 앞뒤로 구분하여 앞에 것은 URL 뒤의 것은 파라미터이다.

- 각각의 파라미터는 '&'로 구분하여 nickname과 job이라는 두개의 파라미터가 온 것을 알 수 있다.

- '='을 이용하여 파라미터와 파라미터의 값을 구분한다.


(2) POST

- header의 body에 담겨서 전송된다.

- URL 상에 전달한 정보가 표시되지 않는다.

- GET에 비해서 보안상 약간의 우위에 있다. (사실상 동일하다)

- 전송할 수 있는 데이터의 길이 제한이 없다.

- 퍼머링크로 사용할 수 없다.

- 서버 쪽에 어떤 작업을 명령할 때 사용한다.

  (데이터의 기록, 삭제, 수정 등)


개발자 도구의 'network' 탭은 클라이언트와 서버간의 데이터 전달 과정을 열람할 수 있다.




5. 예제

example1.html - 사용자가 입력한 정보를 서버로 전송하는 예제 

페이지 내부에는 여러개의 form이 올 수 있고 각 form은 독립적으로 데이터를 전송할 수 있다.

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >

    </head>

    <body>

        <fieldset>

            <legend>

                GET

            </legend>

            <form action="./example2.php" method="GET">

                <p>

                    닉네임 :

                    <input type="text" name="nickname" />// 문자 정보 입력

       // <input type="button" name="nickname" />// 버튼 형식으로 입력

                    <br />

                </p>

                <p>

                    직업 :

                    <select name="job">

                        <option value="designer">디자이너</option>

                        <option value="programmer">프로그래머</option>

                        <option value="planner">기획자</option>

                    </select>

                </p>

                <input type="submit" value="전송"/>// submit: 사용자가 클릭 form 내부(<form></form>)의 지금까지 입력한 정보를 action 속성의 URL로 전송

            </form>

        </fieldset>

        <fieldset>

            <legend>

                POST

            </legend>

            <form action="./example2.php" method="POST">//'./':URL 전체 주소의 현재 폴더까지(상대경로)/example2.php

                <p>

                    닉네임 :

                    <input type="text" name="nickname" />

                    <br />

                </p>

                <p>

                    직업 :

                    <select name="job">

                        <option value="designer">디자이너</option>

                        <option value="programmer">프로그래머</option>

                        <option value="planner">기획자</option>

                    </select>

                </p>

                <input type="submit" value="전송"/>

            </form>

        </fieldset>

    </body>

</html>


example2.php - 사용자가 전송한 데이터를 받아서 화면에 표시해주는 예제 

<html>

        <head>

                <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >

        </head>

        <body>

                <?php

                echo $_REQUEST['nickname'].'님의 직업은 '.$_REQUEST['job'].'이군요!';

                ?>

        </body>

</html>



'WebFont-end > HTML5' 카테고리의 다른 글

[HTML5] <a> 태그  (0) 2014.12.21
[HTML5] <input> 태그  (0) 2014.12.21
[HTML5] <form> 태그 2  (0) 2014.12.20
[HTML5] <form> 태그 1  (0) 2014.12.20
[HTML5] 아이프레임과 프레임  (0) 2014.12.20