본문 바로가기

CS 백엔드/네트워크

HTTP

0. 들어가며

네트워크에 대한 개념과 지식, 동작 원리에 대해서 부족하다는 것을 느끼고 처음부터 공부한다는 생각으로 글을 작성하려고 한다.

 

 

1. 프로토콜

프로토콜이란
컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙이다.

간단히 예를 들면 '1'과 '2'라는 데이터를 보낼 때도   이진법(컴퓨터는 당연히 이진법)으로 16bit를 사용해서 데이터를 주고 받자라고 미리 약속을 합니다.
그러고 나서 약속한대로 0000 0000 0000 0001   /  0000 0000 0000 0010   를 보내면 이를 받는 쪽에서도 당연히 16bit로 왔다는걸 알고 '1'과 '2'라고 인식하는 것입니다.  

 

 

2. HTTP (HTTP 프로토콜)

HTTP는 Hypertext Transfer Protocol의 약자로 웹에서 서버와 클라이언트가 서로 통신하기 위해서 TCP/IP를 이용하여 데이터(메시지)를 주고 받기 위한 방식이다.

 

(1) HTTP 요청과 응답
HTTP 프로토콜로 데이터를 주고받기 위해서는 요청(Request)을 보내고 응답(Response)을 받아야 한다.

위의 사진에서 클라이언트는 브라우저이고 이 브라우저가 서버에 데이터 Request 요청을 하게 되면, 서버는 받은 요청을 토대로 해당 데이터를 클라이언트에게 Response 응답을 해주는 간단한 과정이다.

 

 

(2) HTTP Request Message의 구조

i. start line(request line) : http request의 첫 라인으로써, 세 부분으로 구성된다. 

  • HTTP Method: GET, POST 등 action을 정의.
  • Request target: request가 전송되는 uri (endpoint)
  • HTTP Version

 

ii. headers : request에 대한 meta 정보를 담고 있으며, key : value 구조를 가지고 있다.

  • Host : 요청이 전송되는 target의 host url: 예를 들어, google.com
  • User-Agent : 요청을 보내는 클라이언트의 대한 정보: 사용하는 웹 브라우저와 버전, OS 등
  • Accept : 해당 요청이 받을 수 있는 응답(response) 타입.
    (조건부 요청을 허용: (accept-, If-), 모든 요청 허용:(/))
  • Connection : 해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지 할것인지 아니면 끊을것인지에 대해 지시하는 부분. (Keep-alive or cancel)
  • Content-Type : 해당 요청이 보내는 메세지 body의 타입. 예를 들어, JSON을 보내면 application/json.
  • Content-Length :메세지 body의 길이

 

(3) Http Response Message의 구조

i. status line : response의 상태를 간략하게 나타내며, 3부분으로 구성되어 있다

  • HTTP version  
  • status code : 응답 상태를 나타내는 코드
  • status text : 응답 상태의 설명 (ex: Not Found)

 

ii. headers

  • request의 header와 동일하다
  • response에서만 사용되는 header 값이 있다 (예: User-Agent가 없고, Server가 있음).

 

3. URL

이 때 브라우저 주소창에 URL을 입력하면 해당 주소(host)에 맞는  서버컴퓨터로 가게되고

포트(port)를 통해  서버컴퓨터의  특정 WAS로 가게되고  나머지 resource path를 통해  특정 페이지까지 요청이 됩니다.

 

예를 들면 http://localhost:8080/study/01basic/00hello.jsp 또는 http://192.168.0.76:8080/study/01basic/00hello.jsp를 

브라우저에서 입력하면  localhost나 192.168.0.76(현재 내 컴퓨터 내부 ip주소)을 통해 자기 컴퓨터에 가고

8080포트를 통해  내 컴퓨터의 톰캣으로 가게됩니다. (이 때 내 컴퓨터의 톰캣이 켜져있어야 합니다)

그리고 나머지 resource path를 통해 00hello.jsp까지 간다면  톰캣이  해당 요청을 처리해 응답하면 

브라우저는 응답을 받아 00hello.jsp의 화면을 보여주게 되는 식입니다.

 

 

 

 

 

 

 

 

[참고]

https://joshua1988.github.io/web-development/http-part1/#http-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%ED%8A%B9%EC%A7%95

'CS 백엔드 > 네트워크' 카테고리의 다른 글

[네트워크] 네트워크란 무엇인가?  (0) 2023.01.08
[네트워크] Cache  (0) 2022.11.09
Forward Proxy, Reverse Proxy  (0) 2022.10.25
HTTP/0.9, 1.0, HTTP/1.1, HTTP/2, 그리고 QUIC  (0) 2022.10.24
도메인과 DNS - 이론  (0) 2022.10.20