본문 바로가기

개념정리/네트워크

[네트워크] 06. HTTP 프로토콜 (7계층)


 

06. HTTP 프로토콜

 

 

[HTTP 프로토콜 특징]

 - HyperText Transfer Protocol 하이퍼텍스트 전송 프로토콜

 - www에서 쓰이는 핵심 프로토콜

 - 오늘날 다양한 종류의 데이터를 MIME으로 정의해 전송하며 많은 웹 애플리케이션에서 사용

 - 클라이언트/서버모델로 Request/Response 동작에 기반한 서비스 제공

 - 불특정 다수를 대상으로 하는 서비스에 적합

 - Connectionless (비연결성) 요청-응답 후 연결을 끊음. 연결을 유지하느라 트래픽을 점유하지 않음.

 - Stateless(무상태) 이전 상태를 유지하지 않음. 전 정보를 유지하기 위해 쿠키, 세션 등과 같은 기술이 필요

 

 

[HTTP 1.1발전과정]

 - HTTP 1.0 의 통신부하 문제를 보완한 버전. 기존 TCP연결을 끊지 않음. (connection : Keep-Alive 필드 사용)

※ 통신부하문제?

HTTP 1.0의 경우 TCP연결까지 끊어 연결수립, 동작, 연결해제의 과정을 반복함.

요청 후 응답을 받으면 연결을 해제하기 때문에 이어지는 통신에서도 연결수립과정이 계속 들어감

* Keep-Alive 헤더를 이해하지 못하는 멍청한 프록시 문제

 

 

[통신과정]

출처 : https://www.edwith.org/boostcourse-web/lecture/16661/

 

 

[요청 프로토콜]

 - 클라이언트의 정보를 담음

출처 : https://documentation.help/DogeTool-HTTP-Requests-vt/http_request.htm

 

Request Line 

요청타입 공백 URI 공백 HTTP 버전

  요청타입  

 - GET : 클라이언트가 서버에게 정보 요청 GET /category/game HTTP/1.1

 - POST :  클라이언트가 서버에게 정보 전송 POST /user/login HTTP/1.1

 PUT 방식은 일반적으로 사용하는 업로드가 아님!

 

     URI     

 - 넷 상에서 특정 자원을 나타내는 유일한 주소

 - 형식 scheme://host[:port][/path][?query]

 - scheme : 요청형식 지정 (7계층 프로토콜의 종류를 지정해줌 ftp, http, https...)

 - host : 일반 사용자는 [도메인 주소] 입력 > DNS > [IP주소] 변환

 - port : 일반 사용자가 따로 입력하지 않아도 웹브라우저가 80이나 443으로 알아서 붙여줌

 - query : 클라이언트 쪽에서 전달하는 데이터. ?로 시작하고 &로 연결 

 

 

[응답 프로토콜]

 - 웹페이지의 정보를 담음

출처 : https://documentation.help/DogeTool-HTTP-Requests-vt/http_request.htm

 

Status Line 

HTTP 버전 공백 상태코드 공백 상태문구

상태코드 종류

 - 200~299 : 클라이언트 요청 정상처리

 - 400~499 : [에러] 클라이언트의 요청이 불완전

 - 500~599 : [에러] 서버쪽 오류

 

대표적인 상태문구

 - 상태코드 : 200 / 상태문구 : OK

 - 상태코드 : 403 / 상태문구 : Forbidden

 - 상태코드 : 404 / 상태문구 : Not Found

 - 상태코드 : 408 / 상태문구 : Request Timeout (클라이언트가 서버에 보내는 데이터 요청시간 초과)

 - 상태코드 : 500 / 상태문구 : Internal Server Error 

 - 상태코드 : 503 / 상태문구 : Service Unavailable (최대 세션 수 초과)

 - 상태코드 : 504 / 상태문구 : Gateway Timeout (서버간 데이터 전달 요청시간 초과)

 

 

[헤더]

 - 이전 패킷의 헤더와 다름. 다양한 옵션정보가 들어감

 - 요청 프로토콜 : 일반, 요청, 항목

 - 응답 프로토콜 : 일반, 응답, 항목

    헤더 종류 설명

일반적인 정보 Content-Length 메시지 바디 길이
Content-Type 메시지 바디에 들어있는 컨텐츠 종류(HTML문서는 text/html)

클라이언트 정보 Cookie 서버로부터 받은 쿠키를 다시 서버에게 전송
Host 요청된 URL에 나타난 호스트명 상세 표시
User-Agent 클라이언트 프로그램 식별 정보 제공

서버 정보 Server 웹서버의 프로그램정보 포함(보안상 밝히지 않을 수도 있음)
Set-Cookie 쿠키를 생성하고 브라우저에 전송