HTTP


1 개요

HyperText Transfer Protocol
하이퍼텍스트를 빠르게 교환하기 위한 프로토콜의 일종이다. 80번 포트를 사용한다. HTTP는 서버클라이언트의 사이에서 어떻게 메시지를 교환할 지를 정해놓은 규칙인 것이다.HTTP의 구조는 요청(Request)와 응답(Response)로 구성되어 있다.(하이퍼링크로 예를 들어보자, 클라이언트가 웹 페이지에서 링크가 걸려있는 텍스트를 클릭(요청)하면 링크를 타고 새로운 페이지로 넘어간다(응답)) 우리가 사용하는 브라우저에서 인터넷 주소에 맨 앞에 들어가는
http://는 바로 이 프로토콜을 사용해서 정보를 교환하겠다는 표시인 것이다.

1996년에 첫 상용화버전인 HTTP/1.0가 발표되었고, 1999년에 HTTP/1.1, 그리고 2015년 HTTP/2를 공식으로 발표하였다.

현재 HTTP/1.1을 대부분 사용중이지만 Google계열의 사이트(Google, youtube 등)는 HTTP/2와 HTTP/1.1을 동시에 지원하고 있고, 그외 해외의 대부분의 Major사이트들(facebook, twitter, yahoo 등)은 적어도 SPDY를 사용하고 있고 점차적으로 HTTP/2로 바꾸는 추세다. 하지만 국내의 Major사이트들(Naver, Daum)은 아직까지도 HTTP/1.1만을 지원하고 있다.

TLS를 통한 보안이 적용된 버전은 HTTPS 참고.
이 페이지를 크롬으로 접속하면 https로 뜬다

2 구조

HTTP는 요청(Request)와 응답(Response)로 구성되어 있고, 클라이언트가 요청을 하면 서버가 응답을 하는 구조로 되어 있다. HTTP는 FTP텔넷과는 다르게 비연결식이다. FTP나 Telnet은 클라이언트가 서버에 정보를 요청해도 서버가 클라이언트와 연결을 끊지 않지만, HTTP는 클라이언트가 서버에 정보를 요청하면 응답 코드와 내용을 전송하고 클라이언트와 연결을 종료한다. 우리가 나무위키에 접속을 했다고 가정하자. 접속하면 클라이언트는 GET명령을 나무위키 서버에 전송한다. GET요청을 받은 나무위키는 응답 코드와 메시지를 전송하고 그것을 브라우저가 뿌려주는 것이다.

2.1 요청

GET /index.htm HTTP/1.1 - 헤더
Host : namu.com - 호스트
- 공백 -

다음 요청 메시지는 namu.com의 index.htm을 보여달라는 요청이다. 서버는 이 것을 받고 응답한다.

2.2 응답

HTTP/1.1 200 OK
<헤더>





Hello!







World!




HTTP/1.1은 HTTP의 버전이며, 200 OK는 자료 전송이 성공했다는 의미이다. 헤더 부분엔 서버 정보와 요청 받은 시각 등이 전송되고 그 밑에 응답 본문이 전송된다. 일반적인 웹 문서를 요청했을 경우에는 <HTML>로 시작하는 웹 문서가 전송된다.

3 메시지 종류

3.1 요청

HTTP에서 지원하는 요청 메시지는 다음과 같다.

  • GET : 클라이언트가 서버에게 URL에 해당하는 자료의 전송을 요청한다.
  • HEAD : GET 요청으로 반환될 데이터 중 헤더 부분에 해당하는 데이터만 요청한다.
  • POST : 클라이언트가 서버에서 처리할 수 있는 자료를 보낸다. 예를 들어, 게시판에 글을 쓸 때 클라이언트의 문서가 서버로 전송되어야 한다.
  • PUT : 클라이언트가 서버에게 지정한 URL 에 지정한 데이터를 저장할 것을 요청한다.
  • DELETE : 클라이언트가 서버에게 지정한 URL 의 정보를 제거할 것을 요청한다.
  • TRACE : 클라이언트가 서버에게 송신한 요청의 내용을 반환해 줄 것을 요청한다.
  • CONNECT : 클라이언트가 특정 종류의 프록시 서버에게 연결을 요청한다.
  • OPTIONS : 해당 URL 에서 지원하는 요청 메세지의 목록을 요청한다.

이 중 GET 과 HEAD 요청은 원칙적으로 이를 호출한다고 해서 서버 측의 데이터에 변화가 있어서는 안 된다. 이를 Safe Method 라고 분류한다.
또한, GET, HEAD, PUT, DELETE 는 동일한 요청이 한 번 전송되었을 때와 여러 번 연속하여 전송되을 때의 서버 측의 처리 결과가 동일해야 한다. 이를 Idempotent Method 라고 분류한다.

3.2 HTTP/응답 코드

HTTP/응답 코드 참조.