본문 바로가기

스터디/코딩

[ 자율 스터디 ] 폼과 PHP

HTTP란?

- HTTP는 HyperText Transfer Protocol의 약자로 웹 브라우저와 웹 서버가 서로 소통하기 위한 프로토콜을 말한다.

- HyperText는 사용자가 원하는 부분을 비순차적으로 읽어내는 문서 형식을 말한다.

  ( 일반적인 Text의 경우, 위에서 아래로 순차적으로 읽어 내린다. )

- HTML과 같은 문서를 전송하기 위해 사용되며 OSI 7 계층에서 응용 계층에 있는 프로토콜이다.

- HTTP는 웹 브라우저와 웹 서버의 소통을 위해 디자인되었으며, 전통적인 클라이언트-서버 아키텍처 모델에서 클라이언트가 HTTP 메세지 양식에 맞춰 요청을 보내면 서버는 HTTP 메세지 양식에 맞춰 응답한다.

  ( 여기서 프로토콜은 쉽게 생각해 규칙이라고 생각하면 좋다! )

 

 

  HTTP 통신 규약

      ; 웹 브라우저가 HTTP 통신 규약에 의해 일어나는 데이터 흐름 정리

      ① 사용자가 웹 브라우저 주소 창에 URL을 입력하거나 웹 페이지의 링크를 클릭한다.

      ② HTTP 통신 규약에 의해 사용자의 요청이 웹 서버로 전달된다.

      ③ 웹 서버는 사용자의 요청을 처리하여 그 결과를 HTTP 통신 규약에 의해 사용자의 웹 브라우저로 전송한다.

      ④ 웹 브라우저는 웹 서버가 보낸 데이터를 분석하여 화면에 출력한다.

      ⑤ 웹 브라우저 화면에 텍스트, 글자, 동영상 등의 형태로 나타난 요청 결과를 사용자가 확인한다.

 

  OSI 7계층이란?

       응용, 표현, 세션, 전송, 네트워크, 데이터링크, 물리계층 이렇게 7개의 계층으로 분리하여 네트워크 프로토콜이

       통신하는 구조를 각 계층간 상호 작동하는 방식을 정해놓은 것이다.

 

 

 

 

웹 브라우저에서 웹 서버로의 데이터 전달 방식

; HTTP 프로토콜에서 데이터 전송을 위해 지원하는 7가지 메소드 중 일부인 메소드로 사용한 메소드 방식의 종류에 따라 HTTP 패킷 구조의 Body 영역의 사용 유무 및 방법이 달라진다.

 

[ GET 방식 ]

 

http://localhost:8012/positive-index.php?id=positive&pw=index

 

     - URL에 파라미터를 붙여서 전송하는 방식이다.

     - URL 뒤에 ?를 사용하여 파라미터를 작성하고 &를 붙여 여러 파라미터를 구분하는 방식을 사용한다.

     - URL에 파라미터를 전송하기에 Body 영역을 사용하지 않기에 Body는 빈상태로 보내진다.

     - URL 형태로 표현되기에 특정 페이지를 다른 사람에게 접속하게 할 수 있다.

     - 간단한 데이터를 넣도록 설계되어 데이터를 보내는 양의 한계가 있다.

       ( 한번 요청시 URL 포함 255자까지 전송이 가능하며 HTTP/1.1에서는 2048까지 가능하다. )

     - 멱등적 설계로 서버의 데이터나 상태를 변경시키지 않는 조회 시( 웹페이지 방문, 특정 사용자 정보 조회 )에만

       사용한다.

       (멱등성 : 연산의 한 성질로서 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.

                       즉, 동일한 연산을 몇 번 반복하더라도 동일한 결과가 나온다. )

     → GET 방식의 HTTP 데이터 패킷 구조

          Header : Method 방식 정보, 전송 방식, 요청 페이지 주소, 전송 데이터 등등

          Body : X

 

 

[ POST 방식 ]

     - Body 영역에 데이터를 실어 보내는 방식이다.

     - 데이터 전송양에 길이 제한이 없으며 대용량 데이터를 보내는데 적합하다.

     - POST 방식으로 데이터를 전송할 때에는 Body 영역 데이터 타입을 Header Content-Type에 명시를 해줘야한다.

     - GET 방식과 달리 데이터를 URL를 통해 볼 수 없기에 보안적으로 안전하다.

       ( POST나 GET 방식 모두 보내는 데이터를 전부 클라이언트 측에서 볼 수 있기에 두 방식 모두 보안을 생각한다며

         암호화 해주는게 매우 좋다. )

     - 비멱등적 설계로, 서버의 상태나 데이터 변경시킬 때 사용한다.

     → POST 방식의 HTTP 데이터 패킷 구조

          Header : Method 방식 정보, 전송 방식, 요청 페이지 주소 등등

          Body : 사용자가 요청한 데이터

 

  → GET 방식의 요청은 한번 접근 후 다시 한번 더 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓기에 POST 방식

      보다 속도가 빠르다. (캐싱)

 

  → 웹 페이지에서 사용자가 텍스트 입력 창, 비밀번호 입력 창, 라디오 버튼, 체크박스, 선택 박스, 텍스트 영역, 파일 선책 창과 같은 폼 양식을 통해 입력한 데이터는 POST 방식으로 웹 서버에 전달된다.

 

  → HTTP 메소드

      ; 서버에 요청을 보내는 방법 

      ① GET : 요청 라인을 통해서 자원 요청

      ② POST : 메세지 본문을 통해서 자원 요청

      ③ PUT : URL에 자원을 생성

      ④ DELETE : URL의 자원을 삭제

      ⑤ CONNECT : 터널링의 목적으로 연결 요청

      ⑥ OPTIONS : 응답 가능한 HTTP Method 요청

      ⑦ TRACE : Request의 loop back 테스트

      ⑧ PATCH : 자원의 부분 교체 (일부 수정)

      ⑨ HEAD : HTTP Header 정보만 수진

 

   URL 메타 문자

      ; 특수한 기능을 하는 문자

      ① ? : 해당 페이지로 파라미터 값을 보낸다.

      ② & : 파라미터를 구분해준다.

      ③ = : 파라미터에 값을 전달한다.

      ④ % : 16진수(hex)값으로 표현한다.

      ⑤ + : 공백문자를 표현하기 위해 사용한다.

      ⑥ # : 동일한 웹 페이지에서 여러 페이지로 이동할 때 사용한다. (EX. 책갈피)

      (이래서 웹해킹 실습할 때 뒤에 URL을 주석처리로 바꿔주고 싶을때  무지성으로 #을 그대로 사용하면 안되는 것이다.)

      ⑦ : : 프로토콜을 구분한다.

      ⑧ @ : 메일 계정을 표시한다.

      ⑨ ~ : 사용자의 홈 디렉토리 접근시 사용한다.

 

 

 

[ 연습 문제 ]

 

- 1번

<body>
<?php
	$id = $_POST["id"];
	$pass = $_POST["pass"];
?>
	<ul>
		<li>아 &nbsp;이 &nbsp;디 : <?= $id?></li>
		<li>비밀번호 : <?= $pass?></li>
	</ul>
</body>

 

- 2번

<body>
	<ul>
		<li>나의 취미 : 
			<?php
				$num = count($_POST["hobby"]);
				for ($i=0; $i<$num; $i++) 
				{
					echo $_POST["hobby"][$i];	
					if($i != $num - 1)
					{
						echo ", ";
					}
				}
			?>
		</li>
	</ul>
</body>

 

- 3번

<body>
<?php
	$gender = $_POST["gender"];
	$email_ok = $_POST["email_ok"];
	if ($email_ok == "예")
	{
	 	$email = "수신";
	}
	else
	{
		$email = "비수신";
	}
?>
	<ul>
		<li>성별 : <?= $gender?></li>
		<li>이메일 : <?= $email?></li>
	</ul>
</body>

 

- 5번

<body>
<?php
	$table = $_GET["table"];
	if($table == "free")
	{
       	        $board_title = "자유게시판";
	}
    else
        {
		$board_title = "공지사항";
        }
?>
	<h1><?= $board_title?></h1>
</body>

 

'스터디 > 코딩' 카테고리의 다른 글

[ 자율 스터디 ] MySQL 데이터베이스  (0) 2023.01.09
[ 자율 스터디 ] 쿠키와 세션  (5) 2023.01.05
[ 자율 스터디 ] PHP 함수  (0) 2023.01.04
[ 자율 스터디 ] PHP 배열  (0) 2023.01.04
[ 자율 스터디 ] PHP 반복문  (0) 2023.01.03