[HTTP] URL / HTTP 기본
URI : Uniform Resource Identifier
URL : Uniform Resource Locator
URN : Uniform Resource Name
URL은 위치를, URN은 이름을 나타낸다.
URL과 URI는 보통 같이 쓰이고 주소창에 URL URI를 입력해 웹페이지를 이동한다.
셋을 잘 설명한 블로그
https://13months.tistory.com/117
자바 배울 때 간단히 배운 URI, URL
구글 주소 창에 https.... 를 입력했다.
웹 브라우저는 해당 DNS를 통해 IP주소와 포트번호를 찾고 HTTP 요청 메세지를 만든다.
HTTP 요청 메세지가 만들어진 다음은 이전과 동일하다.
이전에 보내려고 했던 메세지가 HTTP 요청이 돼 TCP 씌우고 패킷 만들고 인터넷 망으로 보내진다.
패킷이 서버에 도착하면 서버는 응답 패킷을 만든다.
다시 패킷을 인터넷 망으로 보내고.... 클라이언트는 패킷을 받고 페이지를 렌더링한다.
HTTP : HyperText Transfer Protocol
어떤 데이터를 전송하든 HTTP 메세지를 사용한다.
지금까지 배운 TCP와 UDP는 HTTP의 기반 프로토콜로 동작한다. (1.1, 2 는 TCP 3은 UDP)
HTTP1.1 을 기반으로 HTTP2 HTTP3이 등장했다. HTTP1.1을 제대로 공부하자.
HTTP는 클라이언트 서버 구조로 구성돼있다.
클라이언트가 서버에 요청을 보내고 응답을 기다린다.
이후 서버가 요청에 대한 결과를 만들어서 클라이언트에게 보낸다.
클라이언트와 서버를 분리해 비즈니스 로직, 데이터, 알고리즘 등은 서버가 담당하도록 하고, 클라이언트는 UI와 사용성에 집중하도록 한다.
HTTP는 Stateful / Stateless 두 가지 프로토콜을 지원한다.
Stateful : 서버가 클라이언트의 응답을 계속 기억한다. 중간에 서버에 장애가 생기면 해당 클라이언트를 다른 서버와 연결해 줘야 하는데 이 때 지금까지의 클라이언트의 응답을 함께 제공해야 한다.
Stateless : 서버가 아무것도 기억하지 않는다. 클라이언트와 연결된 서버에 문제가 생겨도 그냥 다른 서버로 교체할 수 있다.
기본적으로 응답을 계속 기억하며 연결을 유지하는 작업은 비용이 많이 소모되기 때문에 로그인 등 상태 유지가 필요한 요소 외에는 최대한 Stateless 성격으로 설계해야 한다.
HTTP는 기본적으로 연결을 유지하지 않는다.
클라이언트로부터 응답이 올 때만 잠시 서버와 연결시켜 필요한 결과를 받고 바로 연결을 끊어버려 서버 자원을 효율적으로 관리한다. (지속 연결으로 관련된 문제를 해결하기도 했다.)
Stateless로 설계해놓으면 트래픽이 많이 몰려 서버가 고장날 때 바로 대기하고 있던 다른 서버로 연결시킬 수 있어 대용량 트래픽에 대비할 수 있다.
클라이언트의 응답을 기억하지 않아 클라이언트가 데이터를 좀 더 많이 전송해야되는 단점이 있지만, 서버 확장성이 높은 장점이 있다.
서버와 클라이언트, 서버와 서버, 이미지, JSON 등등.. HTTP는 어떤 대상 어떤 형태의 데이터든 전달할 수 있다.
HTTP로 요청할 때와 요청에 대한 응답을 어떻게 표현하는지 알아보자.
빨강 : 시작 라인
노랑 : 헤더
초록 : 공백 라인
요청 메세지의 start-line은 request-line이라고 부른다.
메서드 / 요청 메세지 / http 버전
<메서드 종류>
GET : 서버에게 리소스를 달라고 요청
POST : 리소스를 줄 테니 처리해달라고 요청
DELETE : 삭제
등등..
요청 메세지는 / 로 시작하는 절대경로로 구성된다.
파랑 : 메세지 바디
응답 메세지의 start-line은 status-line이라고 부른다.
http버전 / 상태 코드 / 이유 문구
<상태 코드>
200 : 성공
400 : 클라이언트 요청 오류
500 : 서버 오류
이유 문구는 상태 코드에 따라 사람이 이해할 수 있도록 설명한 글이다.
헤더부터는 요청과 응답이 동일하다.
헤더는 필드명: 필드값 으로 구성된다.
헤더에는 메세지 바디의 내용, 클라이언트의 브라우저 정보 등 HTTP 전송에 필요한 부가정보가 들어있다.
메세지 바디에는 실제 전송할 데이터가 들어간다.
html, 이미지, 영상...
'Computer Science > Network' 카테고리의 다른 글
[HTTP] HTTP 쿠키와 세션 (0) | 2023.06.12 |
---|---|
[HTTP] 헤더 / 쿠키와 캐시 (0) | 2022.08.13 |
[HTTP] 상태코드 (2) | 2022.08.12 |
[HTTP] HTTP 메서드와 활용 (1) | 2022.08.12 |
[HTTP] 클라이언트와 서버 간의 통신 (TCP, UDP, IP, DNS) (0) | 2022.08.10 |
댓글
이 글 공유하기
다른 글
-
[HTTP] 헤더 / 쿠키와 캐시
[HTTP] 헤더 / 쿠키와 캐시
2022.08.13 -
[HTTP] 상태코드
[HTTP] 상태코드
2022.08.12 -
[HTTP] HTTP 메서드와 활용
[HTTP] HTTP 메서드와 활용
2022.08.12 -
[HTTP] 클라이언트와 서버 간의 통신 (TCP, UDP, IP, DNS)
[HTTP] 클라이언트와 서버 간의 통신 (TCP, UDP, IP, DNS)
2022.08.10