CS/네트워크
[네트워크]HTTP
빙응이
2024. 1. 2. 19:32
📝HTTP - HyperText Transfer Protocol
모든 것이 HTTP
HTTP는 인터넷에서 데이터를 주고 받기 위한 프로토콜 중 하나이다.
현재의 HTTP는 모든 것을 전송한다.
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML(API)
- 거의 모든 형태의 데이터를 전송한다.
역사
- HTTP/0.9 1991년 : GET 메서드만 지원, HTTP 헤더X
- HTTP/1.0 1996년 : 메서드, 헤더 추가
- HTTP/1.1 1997년 : 가장 많이 사용
- HTTP/2 2015년 : 성능 개선
- HTTP/3 진행중 : TCP 대신에 UDP로 커스텀 성능 개선
기반 프로토콜
- TCP : HTTP/1.1, HTTP/2
- UDP : HTTP/3
- 이유 TCP는 3 way때문에 속도에 대한 한계가 있기 때문에 UDP를 사용한다.
📝HTTP 특징
클라이언트 서버 구조에서 주로 사용
- 클라이언트는 서버에 요청을 보내고, 응답을 대기
- 서버가 요청에 대한 결과를 만들어서 응답하는 구조
- 팁 : 서버에서 모든 기능을 분담하고 클라이언트는 UI만 신경쓴다.
무상태성 프로토콜
- 서버가 클라이언트의 상태를 보존하지 않는다.
- 즉. 클라이언트 -서버는 요청 응답으로 이루어진 request 스코프로 관리되며 스코프 종료 시 데이터는 유지되지 않는 것과 같음
- 만약 로그인 같은 상태 유지가 필요한 경우 쿠키나 세션을 이용해서 유지한다.
비연결성
- TCP, IP 모델은 연결을 유지하는 모델이다.
- 서버는 연결을 계속 유지하여 리소스에 대한 낭비가 심하다.
- 그래서 HTTP는 요청을 주고 받을 때만 연결을 한다.
- HTTP는 기본적으로 연결을 유지하지 않는 모델이다.
- 비연결성의 한계
- 통신마다 TCP/IP 연결을 새로 맺어야 한다. - 3 way handshake 시간 추가
- 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 다양한 자원이 다운로드 된다.
- 지금은 HTTP 지속 연결(Persistent Connection) 로 문제 해결
- 간단하게 말하면 한개의 TCP로 여러 응답을 처리한다.
- HTTP2 , HTTP3에서 최적화되었다.
HTTP 메시지
start-line 시작라인 |
header 헤더 |
empty line 공백 라인 |
message body |
HTTP 메시지 구조
- 시작 라인(요청 메시지)
- start-line = request-line
- request-line = method SP(공백) request-target SP HTTP-version CRLP(엔터)
- HTTP 메서드
- GET.,POST, PUT, DELETE
- 서버가 수행해야 할 동작 지정
- request-target
- /경로로 지정해서 지정
- HTTP-version
- HTTP 메서드
- 시작 라인(응답 메시지)
- start-line = status-line
- status-line - HTTP-version SP status-code SP reason-phrase CRLF
- HTTP -version
- HTTP 상태 코드 : 요청 성공, 실패를 나타냄
- 200 : 성공 400: 클라 요청 오류 500: 서버 내부 오류
- 이유 문구(reason-phrase): 사람이 이해할 수 있는 짧은 상태 코드 설명 글
- HTTP 헤더의 용도
- HTTP 전송에 필요한 모든 부가정보가 들어간다.
- HTTP 메시지 바디
- 실제 전송할 데이터가 전송됨
단순함, 확장 가능
- HTTP는 매우 단순하다.
- 크게 성공하는 표준 기술은 단순하지만 확장 가능한 기술이다.