HTTP 프로토콜

네트워크 2015. 8. 8. 01:31

HTTP 프로토콜 이란?

HTTP 프로토콜은 웹 브라우저와 웹 서버 사이의 데이터 통신 규칙을 말한다.


즉 HTTP 통신 규약에 맞추어서 요청한다면

HTML파일을 요청하면 HTML파일을 보내주고, 이미지 파일을 요청하면 이미지 파일을 보내준다는 것이다.


http요청 응답에 대한 내부적으로 어떻게 동작하고 있는가?

요청과정(Request)

요청라인, 요청헤더, 공백라인과 요청 데이터로 구성


GET /web04/member/list HTTP/1.1

Host: localhost:9999

Cache-Control: max-age=0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36

Accept-Encoding: gzip, deflate, sdch

Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4


요청 라인(Request-Line)


요청헤더

  * 요청이나 응답 모두에 적용 할 수 있는 "일반헤더(General Header)"

  * 요청 또는 응답 둘 중에 하나에만 적용 할 수 있는 "요청 헤더 또는 응답 헤더(Request Header / Response Header)"

  * 보내거나 받는 본문 데이터를 설명하는 "엔티티 헤더(Entity-Header)"


HTTP헤더들

 헤더 유형

헤더명 

일반헤더

(General Header Fields) 

Cache-Control

Connection

Date

Pragma

Trailer

Transfer-Encoding

Upgrade

Via

Warning 

 요청헤더

(Request Header Fields)


Accept

Accept-Charset

Accept-Encoding

Accept-Language

Authorization 

Expect

From

Host

If-Match

If-Modified-Since

If-Range

If-Unmodified-Since

Max-Forwards

Proxy-Authorization

Range

Referer

TE

User-Agent

응답헤더

(Response Header Fields)

Accept-Ranges

Age

ETag

Location

Proxy-Authenticate

Retry-After

Server

Vary

WWW-Authenticate

본문헤더

(Entity Header Fields) 


Allow

Content-Encoding

Content-Language

Content-Location

Content-MD5

Content-Range

Content-Type

Expires

Last-Modified

기타확장헤더


GET요청 

공백 라인으로 끝납니다. 서버에 보낼 데이터가 있다면 URL주소에 붙여 보냅니다.

POST요청

그에 비해 로그인이나 게시글을 등록하는 경우 POST를 사용하는데, POST요청은 공백 라인 다음에 메시지 본문이 들어갑니다.



응답과정(Response)

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Type: text/html;charset=UTF-8

Content-Length: 1138

Date: Sun, 12 Jul 2015 07:16:42 GMT


<html><head><title>회원목록</title></head>

<body><h1>회원목록</h1>

.........<생략>


상태라인

응답 메시지의 첫 라인은 응답 결과에 대한 상태 정보. 프로토콜 버젼과 상태 코드, 설명으로 구성

 상태코드

상태설명 

200 

 요청이 성공 이루어졌다.

301

 요청한 자원이 이동되었다. 헤더 정보에 이동 위치를 알려줄 테니 다시 요청하라.

304

 클라이언트가 임시 보관한 응답결과에 다르지 않다.

400

 잘못된 요청이다.

404

 요청한 자원을 못 찾았다.

500

 서버 내부에서 오류가 발생했다.


http는 웹브라우저와 웹 서버간의 통신을 위한 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 동작한다.

요청과정, 응답과정으로 이루어져 있습니다.

요청메시지는

RequestLine - Header - 공백 - Body

RequestLine에는 GET, POST와 같은 메소드와 URL, HTTP버젼 등이 포함되며

헤더에는 HTTP프로토콜을 통해 전송할 정보들을 다루는 헤더를 포함시킵니다.

공백을 하나 두고 POST요청과 같은 경우 본문 메세지를 보냅니다.

응답메시지는

status line - Header - 공백 - Body로 구성되바니다.

STATUS LINE200, 404 등등 상태 번호와 버젼 등이 작성되어 전달되며,

헤더와 공백과 함께 POST와 같은 경우 BODY가 함께 전송됩니다.

 

요청과정는 요청라인과 요청헤더로 이루어져 있는데, GET, POST 등의 메서드와 요청 URI 등이 전달되며

요청 헤더에 필요한 정보들이 섞여 들어갑니다. 예를 들어 Cache-control같은 일반헤더, UserAgent, Host와 같은 요청헤더

GET요청과 같은 경우에는 본문 메시지를 넣지 않고, POST요청과 같은 경우에는 이러한 헤더 밑에 본문 메세지를 같이 보내게 됩니다.

응답과정은 응답에 대한 상태코드와 헤더, 그 아래에 메시지 본문을 같이 보내게 됩니다.

 

- http란 무엇인지에 대해서

HyperText Transfer Protocol : 하이퍼텍스트 기반으로 데이터를 전송하겠다는 뜻. 간단히 말하면 링크기반으로 데이터에 접속하겠다는 의미이다.

웹서버는 보통 표준포트 80번 포트로 서비스한다.

httpconnectionless방식으로 작동한다. 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다. 기본적으로 자원하나에 대해서 하나의 연결을 만든다.

이런 방식에 대해서 장, 단점이 있는데

장점) 불특정 다수를 대상으로 하는 서비스에 적합한 방식. 수십만명이 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에 더 많은 유저의 요청을 처리할 수 있음

단점) 연결을 끊어버리기 때문에 클라이언트의 이전 상태를 알 수 없다. 이러한 http의 특징을 stateless라고 하는데, connectless로 부터 파생되는 특징이다.

예컨데 이전에 로그인 접속이 되었는데도 그에 대한 정보를 알지 못하는 상황을 말한다. 이러한 문제를 http는 쿠키를 통해 해결하고 있다.(또는 세션에 의해서 처리하기도)

 

URI와 메서드

URI는 자원의 위치를 알려주기 위한 프로토콜이다. Uniform Resource Identifiers의 약자이다.

메서드는 GET, POST, PUT, DELETE 등의 메서드를 명세한다. 보통 GETPOST만 있으면 되지만, RESTful API를 위해서

GET, POST, PUT, DELETE등의 메소드를 모두 활용하여 CRUD를 구성하는 것이 좋다.

 

HTTP 1.1부터는 KEEP-ALIVE 속성을 지원하는데 이 것은 무엇을 말하는가?

예를 들어 한 번의 웹 요청으로 많은 리소스들을 받게 되는데

HTML페이지, CSS, JS, 이미지 등등 그런데 KEEP-ALIVE속성이 없다면

다음과 같이 동작하게 될 것이다.

1) 웹서버에 연결한다.

2) HTML문서를 다운로드한다.

3) 웹서버를 끊는다.

4) HTML문서의 image, css, javascript 링크들을 읽어서 다운로드해야 할 경로를 저장한다.

5) 웹 서버에 연결한다.

6) 첫 번째 이미지를 다운로드

7) 연결을 끊는다.

8) 웹 서버에 연결한다.

9) 두 번째 이미지를 다운로드

10) 연결을 끊는다.

11) ....


Keep-Alive 속성은 연결의 시간을 정해두고, 동작하게 된다. 

Keep-Alive 속성을 이용해서 연결이 이루어지고 여러 요청을 한 꺼번에 처리하기 때문에 효율적이다.

하지만 그만큼 서버의 운영체제에서는 연결이라는 유한한 자원을 사용하고 있는 것이므로 최대 연결 개수를 설정해놓는다

'네트워크' 카테고리의 다른 글

GET방식 과 POST방식  (0) 2015.08.08
HTTP 와 HTTPS  (0) 2015.08.08
쿠키와 세션의 차이  (0) 2015.08.08
DNS서버  (0) 2015.08.08
TCP 흐름제어 혼잡제어  (0) 2015.08.08
Posted by slender ankles
,