Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- node
- 스크럼 마스터
- 파헤쳐보자
- 개발자
- node.js
- 이벤트 루프
- Django
- 자바
- 지식 그래프
- express
- Groovy
- 스크럼
- Stream
- Router
- 노드
- C++
- java
- nodejs
- 노드js
- ngrinder
- 특징
- RDF
- benchmark
- 예제
- Python
- socket.io
- Knowledge Graph
- scrum
- 스레드
- 소켓
Archives
- Today
- Total
라봉이의 개발 블로그
HTTP 프로토콜이란? 본문
반응형
HTTP 프로토콜
HTTP란 무엇인가?
HTTP란 Hyper Text Transfer Protocal의 약자로 하이퍼텍스트 문서를 교환하기 위한 프로토콜입니다.
TCP/IP 기반으로 한 지점에서 다른 지점으로 요청과 응답을 전송합니다.
한 지점에서 다른 지점으로 HTTP 프로토콜에 맞춘 문자열을 전송합니다.
ex)
GET HTTP/1.1 Host: www.naver.com cache-control: no-cache
HTTP는 많은 정보들이 필요하지만 보통 우리가 웹 프레임워크나 라이브러리들이 HTTP 프로토콜 쉽게 사용할 수 있도록 지원하기 때문에 손쉽게 사용할 수 있는 것입니다.
HTTP의 특징
TCP/IP를 이용하는 응용 계층 프로토콜.
- TCP/IP의 socket을 이용해 연결된다.
연결 상태를 유지하지 않는 비연결성(Connectionless) 프로토콜
- 요청을 받은 서버가 응답하게 되면 소켓을 유지하지 않고 연결을 disconnect한다.
- 연결을 유지하게 되면 리소스가 계속 사용되고 리소스가 부족하면 다른 사용자가 이용하지 못하기 때문에 결과적으로 더 많은 연결을 위해 비연결 지향으로 설계
- HTTP 1.1 부터는 keep-alive 헤더를 통해 연결을 유지할 수 있음.
Stateless하다.
- 클라이언트가 사용자 인증을 하더라도 상태가 유지되지 않기 때문에 Cookie(쿠키) 혹은 Session(세션)을 이용해 인증 등을 해결하기도 한다.
HTTP 메세지
메세지 타입
요청(Request)
- 사용자가 서버에게 원하는 데이터를 요구할 때 사용
응답(Response)
- 서버가 요청받은 대로 사용자에게 데이터를 줄 때 사용
메세지 구조
시작줄 / 헤더 / 바디 로 나눌 수 있다.
시작줄
- Request 시, 메서드와 요청 URL, HTTP version ( GET /exam/help.txt HTTP/1.1 )
- Response 시, HTTP version, 상태 코드 및 사유 구절 ( HTTP/1.1 200 OK )
헤더
- 요청과 응답 메세지에 대한 추가적인 정보를 담고 있다.
- Key/Value 형식으로 나타냄
바디
- 전송하고 싶은 실질적인 데이터를 나타냄
- 헤더를 마치고 \n 후에 나타남.
요청 메세지 구조 예제
GET /hello.txt HTTP/1.1 // 시작줄 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 // 헤더 Host: www.example.com // 헤더 Accept-Language: en, mi // 헤더
응답 메세지 구조 예제
HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain Hello World! My payload includes a trailing CRLF. // 바디
HTTP 1.1 vs HTTP 2.0
처리 방식
HTTP 1은 앞에 날렸던 요청의 응답을 받아야만 다음 요청이 처리될 수 있었다. (1 요청당 1 리소스)
- 따라서 HOL(Head of Line) 블로킹 문제가 발생했다.
HTTP 2에서는 Multiplexing 방식이 도입되어 동시에 여러 리소스를 받아올 수 있게 되었다.
데이터
기존 HTTP 1은 문자열로 전송되었다.
HTTP 2는 바이너리로 인코딩하여 압축해서 전송한다.
- 헤더 또한 압축할 수 있다.
Server Push
- 브라우저에서 필요한 리소스들을 서버가 찾아서 내려준다.
- 따라서 HTTP 1에서 html을 파싱하고 필요한 리소스를 찾아 요청할 필요 없이 HTTP 2에서는 필요한 리소스를 찾는 과정 없이 요청할 수 있다.
자세한 내용은 다음 링크에 아주 자세히 설명되어있음. [HTTP] HTTP 2의 탄생 배경과 특징
참고:
- https://feco.tistory.com/7
- https://www.zerocho.com/category/HTTP/post/5b344f3af94472001b17f2da
- https://americanopeople.tistory.com/115
반응형
'컴퓨터 사이언스 > 용어 정리' 카테고리의 다른 글
클라우드 컴퓨팅의 정의 (0) | 2021.10.22 |
---|---|
REST와 RESTful API (0) | 2019.02.09 |
Comments