2023. 2. 27. 14:59ㆍComputer Science/Network
✅ 아래 내용들에 대해서 알아보자
- HTTP
- HTTP 역사
- HTTP 프로토콜 분석 및 특징
- HTTP 메서드 종류 및 특징
HTTP
HyperText Transfer Protocol의 줄임말로 웹 상에서 웹 서버 및 브라우저 상호 간의 데이터 전송을 위한 OSI 7 Layer의 응용계층에 존재하는 TCP/IP를 이용하는 응용 프로토콜이다.
처음에는, 웹 상의 하이퍼텍스트 형태의 문서를 전달하는데 주로 이용했지만 현재에는 이미지, 비디오, 음성, 파일(Json, XML..)등 거의 모든 형태의 데이터 전송이 가능하다.
HTTP 역사
- HTTP/0.9(1991년) : HTTP 헤더가 없었으며, GET 메서드로써 문서를 가져오고 연결을 끊는 것이 전부(요청에 바디를 포함하지 않았음)
- HTTP/1.0(1996년) : 초기 개념들 도입(HTTP Header, Method, 응답 코드, 리다이렉트, 비지속 연결 등)
- HTTP/1.1(1997년) : 가장 많이 사용하는 버전
- HTTP 헤더 내 Host 필드를 필수 항목으로 함 -> 따라서 1개 IP 주소에 다수의 가상 호스팅이 가능해짐
- HTTP 메서드 추가 및 조정
- OPTIONS, CONNECT, TRACE 추가
- PUT, DELETE 필수로 됨
- 캐시 컨트롤, 블록 단위 인코딩 전송 가능
- 병렬 커넥션 : 여러 TCP 커넥션을 통한 동시 HTTP 처리 (실제 많이 사용됨)
- 지속 커넥션을 통한 커넥션 재사용 : HTTP 1.0에서는 요청 헤더에 Keep-Alive로 구현됐으나, 1.1부터는 지속 커넥션 접속이 기본 동작이 됨 -> 기존 TCP 연결을 끊지 않음으로, TCP 재연결에 대한 지연 방지
- SSL/TLS에 의한 암호화 통신 지원 -> HTTP의 보안 버전 HTTPS (도청, 통신, 임의 내용 변경 등 방지)
- HTTP/2(2015년) : 성능 개선
- HTTP/3(진행 중) : TCP 대신 UDP 사용, 성능 개선
HTTP 프로토콜 분석 및 특징
1. 클라이언트 서버 구조
- 클라이언트 <-> 서버 간에 HTTP 메시지를 주고받으며 통신한다.
- Reqeust <-> Response 구조로 클라이언트는 서버에 요청을 보내고 응답을 대기, 서버가 요청에 대한 결과를 만들어 응답하는 구조
2. 무상태 프로토콜(Stateless)
- 서버가 클라이언트 상태를 유지하지 않는다.(Stateless)
-> 이러한 단점을 해결하기 위해 Cookie/Session이 등장하였음
- 그로 인해 서버 확장성이 높지만(스케일 아웃) 클라이언트의 추가 전송이 필요해진다.
-> 서버가 상태를 저장하지 않기 때문에 장애가 나더라도 다른 서버에 전송하면 된다.
- 아래 그림에서 Stateless 특징으로 중간에 중계서버를 Proxy 서버로 둘 경우 캐싱 처리/필터링/로드 밸런싱 등의 다양한 처리를 할 수 있게 된다.
클라이언트는 중계서버로 요청할 경우 뒤에 존재하는 서버 중 하나라도 정상 작동하는 서버에 Proxy 서버가 요청하게 되고 그로 인해 클라이언트에게 응답을 줄 수 있게 된다.
3. 비 연결성(Connectionless)
HTTP는 기본이 연결을 유지하지 않는 모델이다.
-> 이로 인해TCP/IP 연결(3 Way Handshake)을 새로 맺어야 한다. 따라서 시간 증가됨, 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결함(HTTP 2/3에서 더 많은 최적화 진행 중)
- 일반적으로 초 단위 이하의 빠른 속도로 응답
- 서버 자원을 효율적으로 사용할 수 있게 된다.
HTTP 메서드 종류 및 특징
HTTP Method의 속성에는 크게 3가지 안전(Safe), 멱등(Idempotent), 캐시 가능(Cacheable)이 있다.(글 참고)
아래는 HTTP 메서드 종류 및 특징을 표로 정리하였음
메서드 종류 | 특징 |
GET | URL 형식으로 웹서버에 리소스 요청(조회, 취득) * Conditional GET이란? - 최초 리소스를 요청할 때는 요청만 하고 이후 요청 때는 첫 요청의 응답에 함께 온 HTTP 헤더 정보를 참고하여 변경사항이 있는지 물어보는 GET - 캐싱에 중요한 HTTP 헤더 정보(Last-Modified, eTag 등)이 있다. - 예시) GET /search?q=hello&hl=ko HTTP 1.1 HOST:www.google.com - URL에 서버에 전달하고 싶은 데이터를 query(여기선, ?q=hello&hl=ko) 를 통해서 전달) |
HEAD | HTTP 메시지 헤더만 정보 요청(HTTP 응답 메시지에 Body가 없음) - 해당 자원이 존재하는지 혹은 서버에 문제 없는지 확인용 으로 사용 |
POST | 클라이언트에서 서버로 데이터 전송, 등록(파일 전송도 가능) - 요청 Data를 HTTP Body에 담아 전송하게 된다 - 이때 HTTP 헤더에 보내는 타입에 맞게 Content-Type이 설정 됨 - 만일 요청된 리소스가 새로 만들어지는 것이라면 서버측은 HTTP 헤더 항목 중 'Location:' 에 새로 만들어진 리소스에 대한 URL 정보를 포함시켜 응답함 |
PUT | 데이터 내용 갱신, 데이터(리소스) 없으면 생성 - POST와 형식은 동일하나, 주로 자원의 전체 갱신 위주 - POST와 달리 개싱된 리소스에 대한 URL을 HTTP 헤더 항목 중 Location에 보내지 않아도 됨 |
PATCH | PUT가 달리 데이터(리소스) 일부분 부분 변경 시 사용 |
DELETE | 데이터(리소스) 삭제 |
OPTIONS | 웹서버가 지원하는 가능한 메서드 옵션에 대한 질의(주로 CORS에서 사용) |
TRACE | 요청 리소스에 대한 경로를 보여줌 |
CONNECT | Proxy 서버와 같은 중간 서버에게 중계 연경 요청 시 사용 |
참고자료
- https://www.inflearn.com/course/lecture?courseSlug=http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC&unitId=61360&tab=curriculum
- http://www.ktword.co.kr/test/view/view.php?m_temp1=648
- https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
- https://ko.wikipedia.org/wiki/HTTP
- https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP%EC%9D%98-%EB%A9%B1%EB%93%B1%EC%84%B1-%C2%B7-%EC%95%88%EC%A0%95%EC%84%B1-%C2%B7-%EC%BA%90%EC%8B%9C%EC%84%B1-%F0%9F%92%AF-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
'Computer Science > Network' 카테고리의 다른 글
HTTP Method 안전성, 멱등성, 캐시성 이해하기 (0) | 2023.02.28 |
---|---|
URI, URL ,URN 뭐가 다를까? (0) | 2023.02.27 |
TCP/IP (0) | 2022.05.05 |
Http 상태 코드 정리 (0) | 2022.04.10 |