IT 지식/네트워크(Network)

컴퓨터 네트워크 - Web and HTTP (Application layer)

나아가는중 2021. 11. 27. 17:31
반응형

컴퓨터 네트워크 - Web and HTTP (Application layer)

 

Web Page

웹 페이지는 오브젝트로 구성되어 있다. 오브젝트는 HTML file, JPEG image, Java applet(소형 프로그램), audio file 등이 될 수 있다. 웹 페이지는 기본적인 HTML-file에 여러 참조 오브젝트를 포함하고 있다. 각 오브젝트는 URL로 지칭된다.

예시로 www.dlee0129.tistory.com/manage/posts에  www.dlee0129.tistory.com는 호스트 네임에 해당하고, /manage/posts 는 path(Object URL) name이다. 

 

 

HTTP Overview

HTTP(Hypertext Transfer Protocol)은 서버 HTTP 프로그램과 클라이언트 HTTP 프로그램 간의 통신 프로토콜이다. Brower와 웹 서버 간의 웹 페이지 전달을 위해 사용되며, 웹 페이지가 클라이언트에서 어떻게 해석되는지와는 아무런 관계가 없다.(전달만 한다)

 

클라이언트는 서버에 HTTP Request를 요청 서버는 응답으로 HTTP Response를 보낸다.

Client : 웹 오브젝트를 요청, 수신, 화면에 표시하는 브라우저이다.

Server : 웹 서버는 요청에 대한 객체를 응답으로 보낸다.

 

HTTP는 Transport Protocol 중에 TCP를 사용한다. 데이터 전송 이전에 미리 연결을 맺는 메시지를 교환하는 연결 지향(connection oriented) 방식이다. 실제 data를 전송 이전에 연결을 위한 메세지들이 교환되어야 한다. HTTP 서버는 80번 포트를 사용한다. 

 

TCP 연결을 위한 메시지 교환이 완료되면 HTTP 메세지들을 서버와 클라이언트 간에 송수신한다. 이후 메세지 교환이 끝나면 TCP 연결을 종료한다. (이러한 방식은 TCP 방식을 사용하는 어떤 응용과도 동일하다.

 

HTTP는 stateless 성질을 가지고 있다. 서버는 이전 클라이언트의 요청에 대해 저장하지 않아 수초 내에 동일한 object를 요구해도 방금 전에 보냈다는 사실을 모르므로 다시 보낸다. 이전 요청에 대한 기록을 남기는 것은 복잡하여, 단순화하기 위해 stateless 성질을 가진다.

 

초기 HTTP 0.9에서는 Nonpersistent의 속성을 가져 TCP 연결당 하나의 object에 대해서만 처리한다. 응답을 보낸 이후 바로 TCP 연결을 해제한다. 이는 TCP 연결과 해제에 대한 비용이 비싸 이후 1.0부터는 현재에 사용하는 Persistent의 속성으로 한번 TCP 연결을 맺으면 여러 object들을 주고받을 수 있다.

 

Persistent에서도 pipelining을 사용하는 방식과 아닌 방식으로 나뉜다. pipelining을 사용하지 않는 방식에서는 TCP 연결 이후 클라이언트는 하나의 요청을 보내고 그에 대한 응답이 온 후에 다음 요청을 보낼 수 있다. pipelining을 사용하는 경우는 HTTP 1.1부터 기본값으로 사용되는 방식으로 클라이언트는 요청에 대한 응답을 받기 전에 다른 요청을 보낼 수 있다. 

 

 

HTTP message

Http message에는 request(요청)과 response(응답) 두 종류가 있다. 메시지는 ASCII형태로 사람이 읽을 수 있는 형태이다.

 

HTTP request message

GET / somedir/page.html HTTP/1.1

맨 앞 request line에는 GET, POST 등과 같은 HEAD commads(method)가 온다. GET은 페이지를 가져오라는 의미로 somedir/page.html를 가져오라는 의미이다. 뒤의 HTTP/1.1 HTTP/1.1을 사용한다는 의미이다.

 

이후 header lines에는 다음과 같은 정보들이 올 수 있다.

Host: www.someschool.edu  

요청하는 서버의 주소이다. 이 서버에서 위의 somedir/page.html 이지를 호출하는 것이다.

User-agent: Mozilla/4.0

브라우저와 OS에 대한 정보이다.

Connection: close

HTTP connect에 대한 속성으로 가져온 다음 연결을 닫으라는 의미이다.

Accept-language: fr

여러 언어를 지원하는 경우가 존재하며, 위와 같이 프랑스어를 요청할 수 있으며, 없는 경우 설정된 기본값이 된다.

 

요청 메시지의 마지막 두 번의 엔터(extra carriage return, line feed)는 요청 메시지의 끝임을 나타낸다.

 

Method types

HTTP통신에 사용되는 대표적인 method로 GET, POST, PUT, HEAD 등이 있다. 간략하게 설명하면 다음과 같다.

 

GET: 조회를 할 때에 주로 사용된다. DB에서 사용자 정보 조회, 페이지를 가져오는 등의 용도로 사용된다.

POST: 데이터를 서버로 보낼 때 사용된다. 사진, 정보 등의 내용을 body부분에 포함하여 서버로 송신하고, 서버는 그에 맞는 처리를 한다.

PUT: 데이터 수정을 할 때 사용된다. 수정하고 싶은 정보의 POST와 같이 body에 포함한다. POST와 동일한 URL로 요청하고 비슷해 보이지만, HTTP method가 다르기 때문에 서버는 다르게 동작한다.

HEAD: 디버깅의 요청으로 사용된다. GET과 비슷하지만, 서버는 요구된 object를 주지 않고 응답으로 HEAD부분만 보낸다.

 

HTTP response message

status line과 header lines로 구성된다. 

 

status line에는 HTTP 버전 정보(protocol status pharse)와 처리 결과(protocol status code)가 있다.

처리 결과(HTTP 사태 코드)의 첫 번째 숫자는 응답 클래스를, 뒤의 두 자리는 클래스나 분류 역할을 하지는 않는다.

첫 번째 숫자는 다음과 같은 5가지 클래스로 구분된다.

  • 1xx (정보): 요청을 받았으며 프로세스를 계속한다
  • 2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다
  • 3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다
  • 4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다
  • 5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다

 

header lines에는 날짜와 시간, 서버의 정보, 마지막 생성 혹은 수정시간(last-modified), 응답의 길이와 형태 등의 데이터가 포함된다.

반응형