• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[019] Computer Network: HTTP

18 Feb 2021

Reading time ~5 minutes

Table of Contents
  • 목차
  • HTTP
  • HTTP 의 요청과 응답
    • 비상태 연결
    • MIME 유사 메시지
  • HTTP의 메시지 분류
    • Request Message
    • Response Message
  • HTTP 의 동작 과정
    • Request Message
    • Response Message

목차

  • HTTP
  • HTTP 의 요청과 응답
    • 비상태 연결
    • MIME 유사 메시지
  • HTTP의 메시지 분류
    • Request Message
    • Response Message
  • HTTP 의 동작 과정
    • Request Message
    • Response Message

HTTP

= HyperText Transfer Protocol
의미: 분산 하이퍼미디어 환경에서 빠르고 간편하게 데이터를 전송 하는 프로토콜.

  • 월드 와이드 웹(www)에서 데이터를 액세스하는 데 주로 사용되는 프로토콜
  • HTTP는 80번 포트를 사용하도록 정의됨.
  • 즉, HTTP 서버는 80번 포트에서 대기하고, 클라이언트는 TCP를 사용해 연결을 설정한다.과정 자세히 보기

웹 브라우저: 사용자가 요청하는 자원을 가리키는 URL 주소에 사용할 프로토콜을 표현함.

  • URL 주소의 첫 번째 부분을 사용해 서비스 유형을 표현함.
    • HTTP 서버로부터 웹 정보를 얻으려면 http://www.yerim.co.kr과 같이 URL 주소에 HTTP를 사용 한다고 명시해야 함
    • FTP 서버에 접근하려면 ftp://www.yerim.co.kr
    • 텔넷 Telnet 서버를 사용하려면 telnet://www.yerim.co.kr 형식으로 표현

[HTTP Method]
HTTP Method: HTTP 명령에 해당하는 HTTP 메서드
➡ 이를 이용해 클라이언트가 서버에 요청을 전송하고,
➡ 반대로 서버에서 클라이언트로 문서 정보를 회신한다.
GET Method: 클라이언트가 서버에 요청할 때는 GET 메서드를 사용
POST Method: 클라이언트에서 서버로 회신할 때는 POST 메서드를 사용

📜 [참고] 클라이언트와 서버 사이의 데이터 전송 과정

image



HTTP 의 요청과 응답

HTTP 1.1 버전
RFC 2616으로 발표된 은 클라이언트의 요청 Request 과 서버의 응답 Reply 에 의해 동작하는 아주 간단한 프로토콜
동작 원리
  • HTTP 클라이언트가 서버에 요청을 전송.
    • 요청 내용: 프로토콜 명령에 해당하는 요청 메서드 Method , URL, HTTP 버전이 포함됨
    • 기타 클라이언트의 요청과 관련된 부가 정보도 요청 내용에 포함함
  • HTTP 서버가 상태 정보 회신
    • 상태 정보: 요청의 처리 결과를 의미하는 응답 코드가 포함
    • 클라이언트가 요청한 결과물이나 기타 정보도 함께 회신

비상태 연결

아래 그림은 클라이언트와 서버 간의 요청과 응답이 전송되는 과정이다.
TCP 연결이 설정되면서 요청과 응답이 진행되고,
이후 TCP 연결이 해제되기 때문에 둘 사이에는 연결 존재에 따른 상태 정보가 존재하지 않음.
➡ HTTP는 비상태 Stateless 프로토콜로 분류됨

image

[PROBLEM]
위의 그림과 같은 단발성의 연결 방식은 웹 문서가 작고 간단할 때는 상관없지만,
웹 문서의 내용이 복잡 하면 문제를 야기한다.
➡ 웹 문서 하나가 다양한 그림 정보나 데이터 파일과 연관되기 때문에 성능이 저하될 수 있다.


MIME 유사 메시지

MIME(Multipurpose Internet Message Extensions)
HTTP의 요청, 응답 메시지는 이 유사 구조를 사용해 데이터를 전송함.
즉, 웹 브라우저에서 발생하는 모든 메시지는 MIME 개체와 거의 유사하게 표현되며, 서버에서 전송된 데이터도 MIME 개체로 표현됨

[HTTP의 MIME 유사 개체 VS RFC 2045의 MIME 개체의 차이]

  • HTTP의 MIME 유사 개체에 Content-Length라는 헤더 필드가 존재함.
    • ContentLength 필드: 개체를 전송하는 데 필요한 바이트 수이다.
  • HTTP의 MIME 유사 개체는 MIME 표준인 Content-Transfer-Encoding 헤더 필드 대신에 Content-Encoding과 TransferEncoding 필드를 사용


HTTP의 메시지 분류

두 가지 일반적인 유형의 메시지 존재

image


Request Message

Request Message: 클라이언트가 서버에 보내는 요청 메시지

[구성]
요청메세지 Request Message: 요청문, 헤더, 바디로 구성됨.
➡ 요청문 Request Line 내용: <요청 메서드="">, , 의 세 부분으로 구성됨

요청메세지의 구성
image

[요청 메서드 Request Method]
클라이언트가 서버에 실행을 요구하는 명령을 기술한다.

  • GET: 클라이언트가 서버에 URL이 가리키는 웹 문서의 내용을 전송하도록 요구한다. 문서 내용은 서버가 회신하는 응답 메시지의 바디에 포함된다.
  • HEAD: 문서 내용보다는 특정 문서의 정보를 원할 때 사용한다.
  • POST: 클라이언트가 서버에 정보를 전송할 수 있도록 해준다. 보통 게시판, 방명록처럼 사용자가 입력한 정보를 서버에 전달하는 용도로 사용한다.
  • PUT: 클라이언트가 서버에 문서를 전달하려고 사용한다. 문서 내용은 바디에 포함된다.

[요청문(Request Line)]
예를 들어,
클라이언트의 요청문을 다음과 같이 작성하면
GET / HTTP/1.1

  • 요청 메서드: GET
  • URL: /
  • HTTP 버전: HTTP/1.1
    ➡ 따라서 웹 서버의 최상위(/)에 위치한 자원을 얻고자 하며, 클라이언트가 HTTP 버전 1.1을 지원함을 알 수 있다.

[헤더(header)]
요청문 밑의 헤더는 클라이언트와 서버 사이의 부가 정보를 전달하는 목적으로 사용되며,
형식은 <헤더 이름> : <헤더 값>이다.


Response Message

Response Message: 응답 메시지
클라이언트로부터 요청 메시지를 수신한 서버는 해당 요구를 처리한 후에 그 결과를 응답 메시지 형식으로 회신한다.

[구성]
요청 메시지와 거의 동일한데, 요청문 대신에 처리 결과를 의미하는 상태문 Status Line 이라는 용어를 사용한다.

  • 상태문의 내용: , <상태 코드="">, <상태 이름="">의 세 부분으로 구성된다.

응답 메시지의 구조
image

HTTP 버전은 요청 메시지와 의미가 같고, 상태 코드와 상태 이름은 일반 인터넷 응용 프로그램과 구조가 같다.

[HTTP 상태 코드]
HTTP에 정의된 주요 상태 코드

  • 200: OK 요청이 성공적으로 수행되었다.
  • 202: Accepted 클라이언트의 요청을 수신하였으나, 즉각 실행되지 않고 있다.
  • 400: Bad Request 요청 메시지의 내용에 문법 오류가 존재한다.
  • 401: Unauthorized 요청을 실행하는 데 필요한 적절한 권한이 존재하지 않는다.
  • 403: Forbidden 서비스 요청이 거부되었다.
  • 404: Not Found 원하는 문서를 찾을 수 없다.
  • 500: Internal Server Error 서버 내부에 불가피한 오류가 발생하였다.
  • 501: Not Implemented 요청 사항을 수행할 수 없다.


HTTP 의 동작 과정

HTTP는 앞서 설명한 것처럼 HTTP 클라이언트의 요청 메시지에 대해 HTTP 서버가 처리한 결과를 응답 메시지로 회신하는 형식으로 동작한다.

Request Message

요청 메시지: 먼저 HTTP 클라이언트가 전송하는 메시지를 아래와 같은 형식으로 작성할 수 있다.

GET /index.php HTTP/1.1    ➡ 요청문         
Host: uu.ac.kr             ➡ 헤더       
                           ➡ 공백 한 줄     

[해석]

  • HTTP 클라이언트는 임의의 호스트
  • HTTP 서버는 uu.ac.kr이라 가정한다.
  • 요청 메시지에는 요청문, 헤더와 함께 공백 한 줄이 있으며, 바디는 존재하지 않는다.
  • 요청문
    • GET: 요청 메서드
    • /index.php: URL
    • HTTP/1.1: HTTP 버전
  • 헤더
    • Host: uu.ac.kr의 uu.ac.kr: 헤더 정보로 클라이언트가 요청하는 자원이 있는 서버의 주소이다.
  • 위의 요청 메시지는 HTTP 서버 uu.ac.kr의 최상위 디렉토리 밑에 있는 index.php 파일의 전송을 요청하는 것이다.

Response Message

응답 메시지: 앞의 요청 메시지를 수신한 HTTP 서버 uu.ac.kr이 회신하는 응답 메시지

HTTP/1.1 200 OK                        ➡ 상태문
Date: Thu, 12 Feb 2016 06:29:38 GMT    ➡ 헤더             
Server: Apache/1.3.29 (Unix) PHP/4.3.4RC3      
X-Powered-By: PHP/4.3.4RC3               
Transfer-Encoding: chunked                    
Content-Type: text/html                       
                                        ➡ 공백 한 줄 
<HTML>                                  ➡ 바디      
        <HEAD>                                                                       
                <TITLE> 한국주식회사 홈페이지 </TITLE>                               
        </HEAD>                                                                   
        <FRAMESET rows = "100,*" BORDER = "0" frameborder = "NO">                   
        <FRAME SRC = "top.htm" name = "top" SCROLLING = "NO"                     
        frameborder = "NO" noresize MARGINWIDTH = "0" MARGINHEIGHT = "0">      
        </FRAMESET>                                                            
</HTML>

[해석]

  • 상태문
  • HTTP/1.1: HTTP 버전을 의미
  • 200: 상태 코드
  • OK: 상태 이름
    ➕ 200 OK: 클라이언트의 요청이 성공적으로 수행되었음을 의미
  • 바디 내용
  • 클라이언트가 요청한 index.php 파일의 내용
  • 헤더 정보의 의미에 대한 설명은 생략한다 (참고 : RFC 2616).


CS basic Share Tweet +1