네트워크/네트워크

HTTP(Hypertext Transfer Protocol)

비니화이팅 2018. 1. 16. 03:27

HTTP(Hypertext Transfer Protocol)

- 인터넷에서 웹 서버와 사용자의 인터넷 브라우저 사이에 하이퍼텍스트(hypertext) 문서를 교환하기 위하여 사용되는 통신규약이다.

- 하이퍼텍스트 : 문서 중간중간에 특정 키워드를 두고 문자나 그림을 상호 유기적으로 결합하여 연결시킴으로써, 서로 다른 문서라 할지라도 하나의 문서인 것처럼 보이면서 참조하기 쉽도록 하는 방식을 의미한다.


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

 (HTTP 서버로부터 웹 정보를 얻으려면 http://www.xxx.com과 같이 URL 주소에 HTTP를 사용한다고 명시, FTP 서버에 접근하려면 ftp://www.xxx.com로, 텔넷(Telnet) 서버를 사용하려면 telnet://www.xxx.com로 표현한다.)


[HTTP 특징]

1. 메세지 기반으로 동작한다.

2. TCP 기반 프로토콜이다.

- HTTP 패킷 송/수신 전에 TCP 3way handshake가 선행된다.

3. Stateless방식이다.

- TCP위에서 동작하지만 Stateless방식을 지향한다

- HTTP가 요청하고 응답하면 연결을 끊어버린다. 따라서 TCP 3way handshake부터 다시 시작해야 하기 때문에 속도가 느려진다.

- 따라서 서버에서 응답을 할 때 Cookie값(사용자 정보를 기억하기 위해 만든 인위적인 값)을 만들어서 클라이언트에게 전달하고 클라이언트가 서버에게 Cookie값을 넘겨줌으로써 세션을 유지한다.


[HTTP 패킷 분석 1]

 -> 클라이언트 : Windows XP 

- IP : 10.10.10.10

 -> 서버 : Windows 2000 Server

- IP : 10.10.10.20


- 아래는 Windows XP에서 웹 서버인 Windows 2000 Server로 접속했을 때의 모습을 wireshark로 캡처한 것이다.

- HTTP 통신이 이루어지기 전에 TCP 3way-handshake과정이 먼저 선행된다.


- Client에서 Server로 GET요청을 한다.(Request)

- 참고로 Header와 Body는 개행문자(\r\n)으로 구분된다.

 * Header

 - GET / HTTP/1.1 : 요청방식/ 도메인명 /HTTP의 버전

   (도메인명 : 서버의 도메인이 들어오는 위치요청하고자하는 실제 서버의 경로. HOST필드에 나타나 있음)

 - Accept : 지원하고 있는 데이터 타입(* : 모든 문서 처리 가능)

 - Accept-Language : 지원하는 언어

 - Accept-Encoding : 지원하는 인코딩(데이터를 원하는 형식으로 변환)

 - User-Agent : 지원하고 있는 클라이언트의 웹브라우저

 - Host : 요청한 도메인 (서버는 도메인이 없기 때문에 여기서는 ip주소로 나옴)

 - Connection : 연결이 되는 상태 (여기서는 연결이 되어있는 상태)

 - Cookie : 최초로 요청했기 때문에 여기서는 Cookie값이 존재하지 않음(할당받은 것이 없어서)

 * Body

 - 여기서는 body가 존재하지 않는다.


- 다시 새로고침을 하고 패킷을 살펴보면 Cookie값이 생겼다.


- 이번에는 Server가 응답한 Response패킷을 살펴본다.

 * Header

 - HTTP/1.1 : HTTP의 버전/상태코드

 - Server : 서버의 버전 (정보 수집 단계에서 중요)

 - Data : 시간 (GMT : 세계 표준시)

- Content-Length  : 메시지 바디의 길이

 - Content-Type : 메시지 바디의 타입

 - Cache-control : 캐시의 사용여부

  * body

 - 위와 같이 body가 존재한다.  

 

- 이후에 Client에서 Server로 HTML 구성요소 요청을 하고,


- Server는 이에 대한 HTML 정보를 Client에게 전송한다.


[HTTP 패킷 분석 2]

- 다음은 301응답이 왓을 때의 상황을 캡처한 것이다.


(6)-> 사용자가 페이지를 요청한다.


(7)-> 301 응답을 한다

- 요청한 페이지가 영구적으로 변경됐으므로 변경된 위치를 알려준다(Location)


(8)-> 301 응답에 대한 응답을 한다.


(9, 10)-> DNS질의를 한다.


(11~14)-> 다시 3way handshake 후 웹 페이지를 요청한다.