-
[HTTP] HTTPHTTP 2023. 1. 23. 14:38
HTTP : HyperText Transfer Protocol
네트워크 상에서 거의 모든 형태의 데이터(resource)를 Request-response, stateless , 비연결성하게 전송하는 프로토콜
(통신규칙).HTML텍스트로 시작해서 현재는 IMAGE, 음성, 영상,파일, JSON XML과 같은 API 등등 거의 모든형태의 데이터를 HTTP메세지로 전송
가능하다. 서버간에 데이터를 주고받을때도 대부분 HTTP를 사용!! 지금은 HTTP시대
HTTP version
- HTML1, HTML2는 TCP를 기반 프로토콜로 한다. 그러나 TCP는 데이터가 너무많고 메커니즘자체가 시간이 걸리는편이라
- HTML3부터는 성능을 최적화하는것에 초점을 맞춰 UDP를 기반 프로토콜로 한다.
HTTP특징
1. 클라이언트 서버구조 (Request Response)
클라이언트 서버구조는 클라이언트가 요청을 서버에 보내고 서버가 응답하는 방식으로 작동한다.
1. 클라는 서버에 요청메세지를 보내고(Request) 응답대기
2. 서버가 요청에대한 결과를 만들어서 응답(Response)
3. 응답받으면 클라가 동작
SO,, 비즈니스로직이나 데이터를 서버에 밀어넣고, 클라이언트는 UI,사용성에만 집중해야한다.
그래야 서버와 클라이언트 양쪽이 독립적으로 발전가능2.무상태 프로토콜 (stateless)
서버가 클라이언트의 상태를 보존하지않는다. (stateless) <-> stateful(상태유지) 서버가 클라의 이전상태를 보존한다.
- 상태유지에서는 중간에 서버가 바뀌면 장애가 발생. 서버가 바뀌면 기본세팅을 다시 하나하나 해주어야함.
- 그러나 무상태에서는 중간에 서버가 바뀌어도 클라이언트가 필요한 데이터를 언제든 받을수있음.
상태유지 무상태 - 상태유지 - 항상 같은 서버가 유지되어야 한다. 위 예에서는 중간에 다른 점원으로 바뀌면 안된다.
- 무상태 - 요청할때마다 필요한 데이터를 다 담아서 보내기때문에, 아무 서버나 호출해도된다. 위 예에서는 중간에 다른 점원으로 바뀌어도된다.
- stateless를 이용하면 갑자기 고객이 증가해도 점원을 대거투입할수있고, 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수있다.
- 무상태는 응답서버를 쉽게바꿀 수 있어서 무한한 서버를 증설가능하다.
- 스케일아웃(수평확장)유리 - 같은 기능을 하는 서버군을 늘린다. 예로 같은 시간에 맞추어 발생하는 대용량 트래픽 같은 경우에서 stateless는 중요함
stateless실무 한계와 극복
- 모든것을 무상태로 설계할 수있는 경우도 있고 없는 경우도 있다.
- 로그인한 사용자의 경우, 로그인을 했다는 상태를 서버에 유지해야된다. -> 무상태로 설계할 수 없는 경우 -일반적으로 이를 해결할때는 브라우저 쿠키와 서버 세션을 사용해서 상태 유지를 유지한다.
- 로그인 유지처럼 상태 유지는 최소한만 사용해야함.
- 요청할때마다 데이터를 너무 많이보낸다.
3.비연결성
연결 유지 vs 연결 유지x
- 연결을 유지하는 모델 -> TCP/IP의 연결을 요청응답이 끝났는데도 유지하기때문에 낭비가 심하다
- 연결을 유지하지 않는 모델-> 요청응답이 끝나면 TCP/IP 연결을 종료해버린다(비연결성). 최소한의 자원을 유지한다.
HTTP는 기본이 연결을 유지하지 않는 모델이다. 요청과 응답 한 사이클이 완료되면 연결을 끊는다.
- 서바가 응답하는 속도는 일반적으로 초 단위 이하의 빠른 속도이다. 비연결성으로 인해 동시에 처리하는 요청은 매우적다.
- 1시간동안 수천명이 서비스를 이용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다. 그렇기때문에 TCP/IP연결을 사용할때만 유지하는 비연결성은 서버 자원을 효율적으로 사용할수있게해준다.
비연결성의 한계와 극복
- TCP/IP연결을 할때마다 새로맺어야한다. -> 3 Way handshake시간이 추가된다.
- 지금은 HTTP 지속연결로 문제를 해결한다.
비연결성만 사용하면 웹사이트를 사용할때 html파일 받고 끊고, 다시 연결해서 css 받고 끊고 .. 이 과정을 반복해야하는데, 지속연결을 사용하면 일정시간동안 TCP/IP연결이 유지되어 한번에 처리후 일정 시간 요청이 없는 경우 연결을 끊는 형태로 쓸 수있다.
모든시간 연결유지가 아닌,, 일정시간 연결을 유지한다.. 그 시간동안 요청응답이 다 끝나면 연결 종료 4. HTTP메세지 구조
header와 body 사이에는 꼭 공백라인이 들어가야한다.
HTTP 요청 메세지에서는, 보낼 메세지가 없으면 message body를 공백으로둘 수있다. start-line 시작라인 (request-line / status-line)
GET /search?q=hello&hl=ko HTTP/1.1
요청메세지(request-line) : method SP(공백) request-target SP HTTP-version CRLF(엔터)
- HTTP메소드 - GET, POST, PUT, DELETE
- 요청대상 - 절대경로(/로 시작하는경로) + 쿼리 (/search?q=hello&hl=ko)
- HTTP version - ex(HTTP/1.1)
HTTP/1.1 200 OK
응답메세지 (status-line) : HTTP-version SP status-code SP reason-phrase CRLF
- HTTP-version - HTTP/1.1
- status-code(상태코드) - 요청 성공 실패를 나타낸다.
- reson-phrase(이유문구) - 사람이 이해할 수 있는 짧은 상태 코드 설명 글이다.(ex) OK)
<상태코드>
- 200: 성공
- 400: 클라이언트 요청오류
- 500: 서버 내부 요류
header
header-field = field-name":"OWS(띄어쓰기 허용) field-value OWS 구조
HOST , Content_type 등이 field-name이다 - message-body 내용을 제외하고, 필요한 모든 부가 메타데이터 정보가 다들어있음 (ex message-body의 내용, message-body의 크기, 압축,인증,요청클라이언트 정보,서버 어플리케이션정보, 캐시관리정보 등등)
- 표준 헤더 -> https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
- 필요시 임의의 헤더 추가 가능하다.
message-body
- 실제전송할 데이터이다.
- byte로 표현할수있는 모든 데이터 전송가능하다.(HTML, IMAGE, 영상, JSON ..)
크게 성공하는 표준기술은 단순하지만 확장가능한 기술!
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의
실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...
www.inflearn.com
'HTTP' 카테고리의 다른 글
[HTTP] API설계 예시로 알아보는 URI 설계 개념(컬렉션,스토어,컨트롤URI) (0) 2023.01.26 [HTTP] Client에서 Server로 데이터를 전송하는 방법 (0) 2023.01.25 [HTTP] http 메서드(GET, POST, PUT, PATCH, DELETE) (0) 2023.01.24 [HTTP] URI /URL / URN (0) 2023.01.21 [HTTP] IP, TCP, UDP, DNS (0) 2023.01.20