CS/Network

[Chapter 13] 웹 WWW(HTTP)

devrabbit22 2025. 2. 18. 11:31
  • HTTP(HyperText Transfer Protocol)는 분산 하이퍼미디어 환경에서 빠르고 간편하게 데이터를 전송하는 프로토콜이다. HTTP는 80번 포트를 사용하도록 정의된다. 따라서 HTTP 서버는 80번 포트에서 대기하고, 클라이언트는 TCP를 사용해 연결을 설정한다.
  • 웹 브라우저는 사용자가 요청하는 자원을 가리키는 URL 주소에 사용할 프로토콜을 표현한다. 즉, URL 주소의 첫 번째 부분을 사용해 서비스 유형을 표현한다. 
  • ex) HTTP 서버로부터 웹 정보를 얻으려면 http://www.korea.co.kr과 같이 URL 주소에 HTTP를 사용한다고 명시해야 한다. FTP 서버에 접근하려면 ftp://www.korea.co.kr, 텔넷 서버를 사용하려면 telnet://www.korea.co.kr 형식으로 표현한다.
  • HTTP 명령에 해당하는 HTTP 메서드(Http Method)를 이용해 클라이언트가 서버에 요청을 전송하고, 반대로 서버에서 클라이언트로 문자 정보를 회신한다. 클라이언트가 서버에 요청할 때는 GET 메서드를 사용하고, 클라이언트에서 서버로 회신할 때는 POST 메서드를 사용한다.

HTTP의 요청과 응답

RFC 2616으로 발표된 HTTP1.1 버전은 클라이언트의 요청(Request)과 서버(Reply)의 응답에 의해 동작하는 아주 간단한 프로토콜이다.

동작 원리

  • HTTP 클라이언트가 서버에 요청을 전송한다. 요청 내용에는 프로토콜 명령에 해당하는 요청 메서드, URL, HTTP 버전이 포함되며, 기타 클라이언트의 요청과 관련된 부가 정보도 포함한다.
  • HTTP 서버는 요청의 처리 결과를 의미하는응답 코드가 포함된 상태 정보를 회신한다. 클라이언트가 요청한 결과물이나 기타 정보도 함께 회신한다.

비연결 상태

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

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

MIME 유사 메시지

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

HTTP에서 말하는 MIME 유사 개체와 RFC 2045에 기술된 MIME 개체의 큰 차이는 HTTP의 MIME 유사 개체에 Content-Length라는 헤더 필드가 존재한다는 것이다. Content-Length 필드는 개체를 전송하는 데 필요한 바이트 수이다. 또 다른 차이는 MIME 표준인 Content-Transfer-Encoding 헤더 필드 대신에  Content-Encoding과 Transfer-Encoding 필드를 사용한다는 것이다.

요청 메시지

 클라이언트가 서버에 보내는 요청 메시지는 요청문, 헤더, 바디로 구성된다. 요청문(Request Line)의 내용은 <요청 메서드>, <URL>, <HTTP 버전>의 세 부분으로 구성된다.

요청 메시지의 구조

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

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

응답 메시지

클라이언트로부터 요청 메시지를 수신한 서버는 해당 요구를 처리한 후에 그 결과를 응답 메시지 형식으로 회신한다. 응답 메시지의 구조는 요청 메시지와 거의 동일한데, 요청문 대신에 처리 결과를 의미하는 상태문(Status Line)이라는 용어를 사용한다.

응답 메시지의 구조

상태문의 내용은 <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 서버가 처리한 결과를 응답 메시지로 회신하는 형식으로 동작한다.

요청 메시지

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

HTTP 클라이언트가 전송하는 메시지를 위의 형식으로 작성할 수 있다. 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파일의 전송을 요청하는 것이다.

응답 메시지

앞의 요청 메시지를 수신한 HTTP 서버 uu.ac.kr이 회신하는 응답 메시지는 첫 줄의 HTTP/1.1 200 OK는 상태문이고, 이후 5줄의 헤더와 한 줄의 공백에 이어서 <HTML>로 시작하는 웹 문서의 내용이 기록된 바디가 위치한다.

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" frameorder="NO">
	<FRAME SRC="top.htm" name="top" SCROLLING="NO" frameborder="NO" noresize MARGINWIDTH="0" MARGINHEIGHT="0">
	<FRAME SRC="bot.htm" name="bot" SCROLLING="NO" frameborder="NO" noresize MARGINWIDTH="0" MARGINHEIGHT="0">
	</FRAMESET>
</HTML>

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

시뮬레이션

텔넷 프로그램의 역할

  • kihyun.uu.ac.kr에서 텔넷 프로그램을 사용해 80번 포트로 TCP 접속을 시도함으로써, HTTP가 어떻게 진행되는지 알 수 있다.

HTTP 서비스의 예시

  1. telnet 명령으로 연결을 시도하면(1)
  2. 텔넷 프로그램의 실행과 관련된 메시지 3줄이 출력되고, 80번 포트에서 대기하던 HTTP 서버와 연결된다.(2)
  3. 이후 HTTP 서버는 클라이언트의 요청을 기다리는데, 사용자가 GET/index.php Http/1.1. Host:uu.ac.kr 두 줄과 공백 한 줄을 입력한다(3)
  4. 3줄의 요청 메시지를 수신한 HTTP 서버는 HTTP/1.1 200 OK를 시작으로 응답 메시지를 회신하고 HTTP 동작을 완료한다.(4)

Reference

쉽게 배우는 데이터 통신과 컴퓨터 네트워크

https://soso-hyeon.tistory.com/111

 

[쉽게 배우는 데이터 통신과 네트워크] CH13. 웹(WWW)

01 웹 서비스1 클라이언트-서버 모델클라이언트가 웹 서버를 지칭할 때 사용하는 주소를 URL이라 한다.HTTP는 클라이언트의 요청과 서버의 응답 정보를 전송하기 위한 목적으로 구현된 프로토콜이

soso-hyeon.tistory.com