Network

HTTP

MiteDev 2022. 4. 7. 19:40

HTTP(Hyper Text Transfer Protocol)

 - XML, JSON, HTML 문서와 같은 리소스를 가져올 수 있도록 해주는 프로토콜

 - 웹에서 이루어지는 모든 데이터 교환의 기초이며, Client/Server 프로토콜이기도 하다.

 - Client/Server 프로토콜이란, 수신자(Client)측에 의해 요청이 초기화 되는 프로토콜

 - ClientServer는 개별적인 메시지 교환에 의해 통신하는데 Client에 의해 전송되는 메시지를 Request, 그에 대해 Server에 의해 전송되는 메시지를 Response라 한다.

 - Request는 하나의 개체, User-Agent(혹은 그것을 대신하는 Proxy)에 의해 전송된다.

 - 각 개별 요청들은 Server로 보내지고, ServerRequest를 처리하고 ResponseClient에 전달한다.

 - RequestResponse 사이에는 여러 개체들이 있는데, 다양한 작업을 수행하는 Gateway 또는 Cache 역할을 하는 Proxy 등이 있다.

 

 

Client(User-Agent)

 - User-Agent는 사용자를 대신하여 동작하는 모든 것 (ex. browser, robots.txt )

 - Browser는 항상 Request를 보내는 개체이며 결코 서버가 될 수 없다.

 - BrowserHTTP Request 내에서 사용자의 명령을 변환하고, HTTP Response를 해석하여 사용자에게 표시한다.

 

Server

 - Client에 의한 Request를 받아 그것에 대한 Response를 보낸다

 - Server는 논리적으로 하나만 존재하며, 실제로는 로드 밸런싱 혹은 여러 서버의 집합 일 수 있다.

 - Server는 반드시 하나일 필요가 없고, 여러 개의 서버를 동일한 머신 위에서 호스팅 할 수 있으며, 동일한 IP 주소를 공유할 수도 있다.

 

HTTP의 특징

 - HTTP는 상태를 저장하지 않는다(stateless). , 한번 request&response 과정을 거치면 연결을 끊게 되어 이전 요청에서 Client가 뭘 했는지 알 수 없게 된다.

 - 위에서 언급했든 HTTP는 서로 전송이 끝나면 연결이 끊어지는데, 이렇게 매번 동일한 주소로 요청을 할 때마다 새로운 연결을 설정하고 끊는다면 자원의 낭비가 심해지게 된다.

 - 이러한 문제를 해결하고자 Keep-Alive라는 옵션이 HTTP1.1부터 나오게 되었다.

 

HTTP 상태코드

 - 1XX (조건부 응답): 요청을 받았으며 작업을 계속 진행한다.

 - 2XX (성공): Client에서 요청한 동작을 수신하여 이해했고 성공적으로 처리했다.

 - 3XX (redirection): 요청 완료를 위해 클라이언트에서 추가 작업이 필요하다

 - 4XX (request 오류): 요청의 문법이 잘못되었거나, 요청을 처리 할 수 없다.

 - 5XX (response 오류): 서버가 명백히 유효한 요청에 대해 수행하지 못했다.

 

참고

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview