HTTP

페미위키

1 개요

HTTP(Hyper Text Transfer Protocol)는 하이퍼텍스트 등을 전송하기 위한 네트워크 규약으로, OSI 7 계층에서 애플리케이션 계층에 해당하는 프로토콜이다. 주로 사용되는 포트는 80 포트이며, 이 외에 8000, 8080 포트 등이 자주 사용된다. 단, 8000이나 8080 포트는 좀비 PC 프로그램에도 종종 사용되고 있어서 일부 네트워크망에서는 차단되어 있다.

현재 최신 규약 버전은 2.0이며, 가장 많이 사용되는 버전은 1.1이다. 1.0 버전은 거의 쓰이지 않고 있다.

최근에는 웹 서버와 웹 브라우저 사이에서 뿐 아니라 여러 프로그램에서 두루두루 쓰이는데, 게임, 메신저는 물론이고 여러 가지 애플리케이션에서 서버와의 통신에 사용하고 있다. 서버를 따로 만들 필요가 없이 웹 서버에 웹 애플리케이션만 작성하면 되기 때문에 생산성이 높아지기 때문이다. 이렇게 일반 애플리케이션에서 사용하는 HTTP 또는 HTTPS 통신 규약은 크게 SOAPRESTful으로 나눌 수 있다.

2 프로토콜 동작 방식

HTTP는 기본적으로 TCP/IP로 구현되고, 요청(Request)과 응답(Response)의 순서로 동작한다. 모든 요청과 응답에는 헤더 부분이 포함되고, 서버와 클라이언트에서는 헤더 부분을 분석하여 본 패킷을 처리하게 된다.

클라이언트에서 서버로 요청을 하며, 서버는 요청한 클라이언트에게 응답한다. HTTP 1.0은 응답 이후 서버와 클라이언트의 TCP/IP 연결 자체가 끊어지지만 HTTP 1.1부터는 연결을 유지한다.

2.1 요청 헤더

GET /w/%ED%8E%98%EB%AF%B8%EC%9C%84%ED%82%A4:%EB%8C%80%EB%AC%B8 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
Host: femiwiki.com

요청 헤더는 기본적으로 HTTP 메소드(HTTP Method)라고 불리는 GET, POST, PUT, DELETE 등이 첫 줄 가장 처음에 위치한다.

띄어쓰기 후 요청 URL이 들어가고, 다시 띄어쓰기 후 HTTP 버전이 들어간다. 이후 개행한다.

두 번째 줄 부터는 헤더 필드들이 들어가는데, 보통은 HostUser-Agent, Content-Length 등이 들어간다. 필드 이름 바로 다음에 콜론(:)이 들어간 후 해당 필드에 대한 값이 들어간다. 필드는 여러 개가 들어갈 수 있다.

인자가 끝난 후에는 개행 문자가 두 번 들어간다. 두 개의 개행 문자가 연속으로 있으면 헤더가 끝나고 본 데이터가 들어온다는 뜻이다.

2.2 응답 헤더

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Language: ko-KR
Content-Length: 12345

응답 헤더는 먼저 서버에서 HTTP 통신에 사용하는 규약 버전을 명시한 후 띄어쓰기하여 오류 코드를 전송한다. 200 코드는 오류가 없다는 오류 코드이다. 이후 띄어쓰기 하여 해당 오류 코드의 설명을 추가로 작성한 뒤 개행한다.

이후 요청 헤더와 같이 헤더 필드가 들어간다. 헤더 필드가 끝나면 개행 문자가 연속 두 번 들어간다.

3 HTTPS

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)는 HTTP 규약이 SSL(Secure Socket Layer) 상에서 동작하는 것을 말한다. 기존의 HTTP 규약은 OSI 7 계층의 데이터 계층인 TCP/IP 위에서 동작하는데 비해 HTTPS는 TCP/IP 위에서 동작하는 애플리케이션 계층인 SSL 위에서 동작한다.

헤더 부분조차 암호화되어 있어 보안에 유리하며, 이 보안성은 TLS 연결에 사용된 인증서의 종류에 따라 달라진다. HTTPS를 사용해 암호화된 통신을 하면 사용자의 ID 또는 패스워드 등 데이터를 중간에서 가로채지 못하고, 통신 위변조도 불가능하기 때문에 회원 수 일정 이상인 경우 반드시 로그인 또는 회원가입 등에 HTTPS를 사용하도록 법이 개정되어 있기도 하다.

이러한 이유로 국내를 비롯해 인터넷 검열을 실시하는 국가에서는 HTTPS 통신을 검열하지 못하기도 한다. 검열이 심한 나라에서는 아예 IP를 차단해버리지만 우리나라의 경우 HTTP 헤더의 Host 필드를 읽어 블랙리스트에 있는 사이트인 경우 warning.or.kr로 리디렉션하는데, HTTPS 통신은 HTTP 헤더 필드 자체를 중간에서 읽지 못하기 때문에 리디렉션이 불가능하다.