진짜 개발자
본문 바로가기

CS(Computer Science)/Network

Network - Application 계층) HTTP 프로토콜 - 수정중 (메소드)

728x90

HTTP프로토콜이란

- Client와 Server사이에서 요청과 응답을 하기 위한 프로토콜이다.

- TCP/IP 80번 PORT를 사용


특징이자 단점?

- FTP, TELNET 등과 다르게 비연결형이다(Stateless) 다시말해 사용자들에 대한 세션을 유지하지 않는다

  때문에 방금 인증했던 사용자를 구분할 방법이 없다.

  =>서버가 수 많은 클라이언트 들과 연결을 유지하면 해당 세션을 관리하기도 어렵고 서버에 부하가 걸리기 쉽다 

하지만 실제로 서버와 클라이언트를 연결을 해두어도 사용자가 HTML을 응답받으면 모두 읽는데까지 시간이 걸리므로

      통신을 하는데 사용하는 시간은 얼마 되지않기 때문에 서버는 필요한 정보를 전달하고나면 연결을 바로 끊어서 다음요청을 

기다리는 방식을 사용하게 되었다.

    

쿠키

- stateless의 특징을 가지는 HTTP프로토콜을 보완하기 위해 등장

방식

   1. 클라이언트가 특정 웹사이트에 접속하면 클라이언트의 웹브라우저가 해당 웹사이트의 이름으로된 쿠키가 

     클라이언트의 디스크에 존재하는지 확인

   2. 없다면 웹서버가 쿠키를 생성하여 웹브라우저가 클라이언트의 하드디스크에 저장

   3. 있다면 웹브라우저가 웹서버에게 전달한다


HTTP 수행 과정

1. Client가 HTTP 80포트를 통해 www.someSchool.edu 서버로 TCP 연결을 시도한다.

2. Client는 1단계에서 설정된 TCP 연결 소켓을 통해 서버로 HTTP 요청 메시지를 보낸다 

(요청메시지에는 /someDepartment/home.index 의 경로를 포함한다.)

3. Server는 1단계에서 설정된 TCP소켓을 통해 HTTP 요청 메시지를 받는다

4. Server는 자신의 저장소로부터 /someDepartment/home.index 객체를 추출한다. 

   HTTP 응답메시지에 그객체를 캡슐화하여 소켓을 통해 Client에게 보낸다.

   (메시지를 받게되면 Client에게 연결을 끊으라고 한다)

5. Client가 메시지를 받으면 연결이 끊긴다.



HTTP 프로토콜 메시지 포맷 (https://developer.mozilla.org/ko/docs/Web/HTTP/Messages)

1. HTTP 요청 메시지 포맷


(출처 - http://sabercomlogica.com/en/ebook/application-layer-http-protocol-connections/)


     1. 요청라인 

- 요청라인은 Method필드, URL필드, HTTP버젼필드 3개의 필드로 구성된다

- GET방식은 URL필드로 식별되는 객체를 요청할 때 사용된다

- HTTP/1.1 버전을 사용하고 있다.


2. 헤더라인

- Connection : Close 는 브라우저는 서버에게 지속연결 사용을 원하지 않다고 말하고 있다.

- User-agent : Mozilla/5.0 는 사용자의 에이전트 즉 서버에게 요청하는 브라우저의 타입을 명시하고 있다.

- Accept-Language : fr 는 사용자가 객체의 프랑스어 버전을 원함을 말하고 있다.



2. HTTP 응답 메시지 포맷


(출처 - http://sabercomlogica.com/en/ebook/application-layer-http-protocol-connections/)


1. 상태라인

- 상태라인은 HTTP버젼필드, 상태코드필드, 상태메시지필드 3개의 필드로 구성된다

- 200 상태코드는 모든것이 양호함 (OK) 를 나타낸다


2. 헤더라인

- Connection : close 는 Client에게 메시지를 보낸 후 TCP 연결을 닫는 데 사용한다.

- Date : 는 HTTP 응답이 서버에 의해 생성되고 보낸 시간을 나타낸다

- Server : 는 메시지가 아파치 웹서버에 의해 만들어 졌음을 알려준다. (User-agent: 와 비슷하다)

- Last-Modified : 객체가 생성되거나 마지막으로 수정된 시간을 알려준다

- Content-Length : 송신되는 객체의 바이트 수를 나타낸다.

- Content-Type : 개체 몸체의 내부 객체가 HTML 텍스트인것을 나타낸다.


3. 요약

요청(REQUEST)

응답(RESPONSE) 

 요청라인(Request Line)

상태라인(Status Line) 

헤더라인(Header Line)

 헤더라인(Header Line)

 Blank Line

  Blank Line

Body Line 

 Body Line