HTTP란
- HTML과 JS, CSS같은 파일을 웹 서버에 요청하고 받아오기 위한 프로토콜
- Request/Response 동작에 기반하여 서비스를 제공함
- HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다.
HTTP 특징
- 80번 포트를 사용
- 비연결(Connectionsless) 지향 : 클라이언트가 요청을 서버에 보내고 서버가 적절한 응답을 클라이언트에 보내면 바로 연결이 끊긴다
- 상태정보 유지 안 함(Stateless) : 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않음
HTTP 요청 프로토콜
Request-Line
*(( general-header | request-header | entity-header ) CRLF)
CRLF
[ message-body ]
- Request-Line : 요청 방식(Method), URI, HTTP 버전 등이 담겨있음
- Header : 클라이언트 PC와 브라우저 정보, 쿠키 등 다양한 클라이언트 환경에 대한 정보가 담겨있음 (따라서 보안에 취약).
- general-header : Data나 Connection 등에 대한 정보
- request-header : 요청하는 클라이언트에 대한 자세한 정보를 담고있음(Host, Cookie 등)
- entity-header : message body의 길이나 message body에 들어있는 컨텐츠 종류 등에 대한 정보가 담겨있음
- message-body : HTTP 본문이 담겨있는 곳. 주로 클라이언트가 입력한 데이터를 저장하는 영역임.
HTTP 응답 프로토콜
Status-Line
*(( general-header | response-header | entity-header ) CRLF)
CRLF
[ message-body ]
- Status-Line : 서버의 응답 정보를 담고있음.
- 100 ~ 199 : 단순 정보
- 200 ~ 299 : 요청이 성공
- 300 ~ 399 : Client 요청이 수행되지 않아 다른 URL로 재지정
- 400 ~ 499 : Client 요청이 불완전하여 다른 정보가 필요 (클라이언트 잘못)
- 500 ~ 599 : Server의 오류를 만나거나 Client 요청 수행 불가 (서버 잘못)
- Header
- response-header : 서버 자체에 대한 정보, 응답에 대한 부가적인 정보 등을 포함하는 헤더
- 나머지는 요청과 같음
HTTP 문제점
- 전송되는 데이터가 암호화되지 않아 중간에 정보를 도난단할 수 있음