ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP 프로토콜 정리
    Web 2021. 8. 28. 22:47

    ㄴ 웹의 구성요소들이 서로 대화를 할 때 사용되는 프로토콜

     

    HTTP (Hyper Text Transfer Protocol) 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.

    (프로토콜은 통신규약, 규칙정도로 생각하자) 

     

    HTML, CSS, JS, Image와 같은 파일들을 서로 주고받으려면 서버와 클라이언트가 서로 알아볼 수 있는 약속된 메세지가 필요한데, 그 메세지를 HTTP 라 하고, HTTP는 Request와 Reponse를 위한 메세지로 구분되어 있다. 

     

    간단하게 HTTP 특징을 보면

    • HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해서 해석된다.
    • TCP/IP를 이용하는 응용 프로토콜(application protocol) 이다.
    • 무상태성
      (상태를 기억하기 위해 Cookie와 Seesion 등장)
    • 비연결성
      (HTTP는 연결상태를 유지하지 않기 때문에 요청/응답 방식으로 동작)

     

     

    HTTP Request Message 예시


    개발자 모드 > 네트워크 탭을 통해 확인할 수 있는 Request Message
    Http Request Header Format

     

    Request Line 영역 

    GET /1.html HTTP/1.1

     ㄴ HTTP Method(어떤방식으로 통신할 지), 파일이름(요청하는 정보), HTTP Version을 나타낸다.

     

    Request Headers 영역

    • Host : localhost:8080

    ㄴ 인터넷에 연결되어 있는 컴퓨터 한대 한대를 식별하는 것이 host 이다. 웹서버의 주소를 나타낸다.

    ㄴ 하나의 웹서버가 여러개의 도멘인을 서비스 할 수 있다. a라는 웹서버가 a.com b.com c.com 이라는 도메인을 호스팅하고 있고 각각의 주소별로 다른 웹서버는 host 에 적혀있는 주소가 무엇이냐에 따라서 다른 정보를 보내줄 수 있다. 이를 가상호스트라 한다. 

    ㄴ 한대의 컴퓨터에는 여러대의 서버가 설치되어 있을 수 있다. 8080이라는 포트번호에 등록되어 있는 웹서버를 이야기 하는것이다. 

     

    • UserAgent 

    ㄴ 웹브라우저의 다른표현이다. 어떤 웹브라이저인지, 운영체제가 무엇인지, OS 버전등을 확인 할 수 있다.

     

    • Accept-Encoding : gzip, deflate, br

    ㄴ 웹브라우저 웹서버가 통신할때 응답하는 데이터 양이 많을때 이를 압축해서 전송하면 웹 브라우저가 압출을 풀어서 처리할 수 있어 네트워크 자원을 아낄 수 있다.

    ㄴ 이 때 웹 브라우저는 어떤 압축방식을 지원하는지 표시되는 영역이다. 

     

    • If-Modified-Since : Tue, 17 Jul 2021 23:23:26 GMT

    ㄴ 요청한 데이터에 대해서 다시 요청을 할때 요청할때마다 다운로드하는것은 비효율적이다. 

    ㄴ 이 정보를 서버에 전송한다는 것은 내가 갖고 있는 파일은 마지막으로 언제 다운받았는지를 웹서버에게 알려주는것이고 웹 서버는 가지고 있는 파일이랑 어느것이 더 최신인지를 비교해서 전송여부를 결정한다.

     

    Reqeust Message Header 영역

    ㄴ Request Line + Request Headers 영역

     

    Reqeust Message Body

    ㄴ서버 쪽으로 전송해야되는 정보가 있다면 Reqeust Message Body 에 담는데 Header 와 Body  사이에는 Blank line 을 두어서 구분한다고 약속되어 있다. 

     

     

     

    HTTP Response Message 예시


    개발자 모드 > 네트워크 탭을 통해 확인할 수 있는 Response Message
    http response header format

    Status 영역 

    •  HTTP/1.1 200 OK

    ㄴ 첫번째 행에는 Staus 정보가 노출된다. 

    ㄴ http 버전 정보, 응답 결과에 대한 코드, 응답결과를 사람이 이해하기 쉽도록 설명한 영역 

     

    • [참고] 응답 상태코드

      2xx 성공
      3xx 리다이렉션 ( 내가 처리할건 아닌데 다른데로 잘 넘겼을 때 (다른데로 넘겼을 때)) 
      4xx 요청 오류 ( 너 잘못된거 요청했어, 너가 말한게 틀렸어, 그거 아니야 없거나 잘못됬어 )
      5xx 응답 오류 (나한테 무언가 문제가 있어 미안해 서버에 문제있어)

    Headers 영역 

    • Content-type: text/html 

    ㄴ 웹서버가 응답할 때 이 응답은 어떤 타입인지 웹브라우저에게 전달하고, 웹 브라우저는 타입에 맞게 해석하여 화면에 노출한다. 

    ㄴ 이미지일 경우에는 Content-type: image/jpeg

     

    • Content-Length: 1434 

    ㄴ 응답하는 컨텐츠의 전체 크기(사이즈) 를 가르키며 단위는 byte 이다. 

     

    • Content-Encoding: gzip 

    ㄴ 컨텐츠가 어떤 압축방식을 사용하였는지를 나타내며 클라이언트는 해당 방식으로 압출을 풀어서 읽어야한다. 

     

    • Last-Modified: Tue, 17 Jul 2021 23:23:26 GMT

    ㄴ 해당 정보가 마지막으로 언제 수정되었는지를 표시한다. 

     

    Body 영역

    ㄴ Blank line 을 두어서 헤더와 구분되며, 응답 데이터를 담는다.

     

     

     

    결론 


    왼쪽- 클라이언트 요청 메세지, 오른쪽 서버 응답 메세지

    이와 같이 웹 브라우저와 웹 서버가 커뮤니케이션 하는 것을 직접 텍스트로 만들어보면, 웹 브라우저는 요청을 하기전 위와 같은 요청 메세지를 생성하고, 웹 서버는 요청 메시지를 해석해서 응답 메세지를 만들어 준다. 

    응답 메세지를 받은 웹 브라우저는 응답 메세지를 참조하여 화면에 표시해준다. 

     

    조금 쉽게 정리하자면, 웹 브라우저 역할은 사용자가 요청한 정보를 요청 메세지로 만들어 웹 서버에게 대신 물어봐주고 웹 서버는 응답 메세지를 만들어준다. 웹 브라우저는 응답 메세지를 보고 화면에 그려주는 것이다. 

     

     

    Script


    Http 는 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 

    데이터 혹은 파일들을 서로 주고 받으려면 서버와 클라이언트가 서로 알아볼수 있는 약속된 메세지가 필요한데 그 메세지를 HTTP 라 하고, 이는 요청 메세지와 응답메세지로 구분되어 있다. 

     

    요청 메세지는 

    Request Message Header 영역과 Request Message Body 영역으로 구분되어있다. 

    이 둘은 Blank line을 두어서 구분되고 있다.

    Request Message Header 영역은 Request Line 영역 과 Request Header 영역으로 구분되는데, 

    Request Line 영역에는 Http 메서드, 요청 데이터 정보, http 버전을 표시하고 있고, 

    Request Header 영역에는 host, user-agent, accept-encoding, if-modified-since 와 같은 정보가 들어있다. 

     

    서버쪽으로 전송해야되는 정보가 있다면 Request Message Body 에 담아 전송하면 된다.

     

    다음 응답 메세지는

    첫번째 줄에는 Staus 영역이 표시되고 http 버전정보, 응답결과에 대한 코드와 이를 설명한 정보가 들어있다. 

    그 이후에는 Header 영역인데 content-type, content-length, content-encoding, last-modified 등의 정보로 구성되어 있고 Blank Line 을 기준으로 Body 영역도 존재한다. 

     

     

     

    참고자료


    https://opentutorials.org/course/3385

    https://victorydntmd.tistory.com/286

     

     

     

    추천도서


    http 완벽가이드

    'Web' 카테고리의 다른 글

    Thread Pool (Java, Tomcat, SpringBoot)  (0) 2024.07.25
    XML & JSON & YAML  (0) 2021.10.30
    [DB] Connection Pool 정리  (1) 2021.09.11
    쿠키(Cookie)와 세션(Session) 정리  (0) 2021.09.04
Designed by Tistory.