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>아 이 디 : <?= $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 |