[Web] HTTP 기본 개념

 

HyperText Transfer Protocol


(1) HTTP (HyperText Transfer Protocol)

  • 인터넷에서는 FTP, Telnet, HTTP, SMTP, POP 등 여러 프로토콜 사용 > 가장 많이 사용하는 프로토콜

  • 문서 간의 상호 연결 > 다양한 텍스트, 그래픽, 애니메이션을 화면에 보여주고, 사운드를 재생해 줌

  • 전 세계의 수많은 정보를 탐색하기 위해 HTTP 이용

  • RFC 1945 문서 > HTTP는 0.9 버전부터 사용 > 단순히 읽기 기능만 지원

[그림1] HTTP 이용 > 서버에 연결

 

1. 먼저 클라이언트가 웹 브라우저를 이용하여 서버에 연결 요청 > 서버는 요청한 클라이언트에 대한 서비스 준비

 

2. 클라이언트가 읽고자 하는 문서를 서버에 요청 > 서버는 그 문서를 전달 > 연결 종료

 

  • 위 그림의 기본 연결은 HTTP 버전에 관계 없이 동일

  • 기능이 많이 부족했던 HTTP 0.9 버전은 오래 사용 X

  • 현재 웹에서 주로 사용하는 HTTP는 1.0과 1.1버전

  • HTTP 1.0의 메소드는 GET / HEAD / POST 방식 지원

  • HTTP 1.1의 메소드는 OPTIONS / GET / HEAD / POST / PUT / DELETE / TRACE / CONNECT 방식 지원

 

1-1. HTTP & HTTPS

  • HTTP 프로토콜은 데이터가 네트워크 장비 통과 시, 암호화 되지 않은 단순한 TCP 사용 > 네트워크에 잠입한 공격자가 중간에 정보 가로채기 가능

  • HTTPS(HTTP over Secure Socket Layer)는 애플리케이션 계층 프로토콜 > SSL(Secure Socket Layer)을 이용, 클라이언트와 서버 사이에 주고 받는 정보를 보호하는 데 사용

  • HTTPS는 공격자가 중간에 스니핑 하기 어렵게 만듦 > 그러나 웹 애플리케이션 해킹의 주요 원인인 사용자 입력 값에 대한 검증 X

 

 

1-1-1.Request (웹 서버에 데이터를 요청하는 패킷)

[그림 2] Request

 

일반적으로 첫 번째 줄에는 다음과 같은 내용이 들어간다.

 

  • HTTP 전송 방법 : 웹 서버로부터 자료를 가져오는 기능인 GET 사용 > 별도의 메시지 보기를 필요 X

  • 요청된 URL : 웹 서버 자료 요청 시에 사용하는 경로

  • HTTP 버전 : 인터넷에서 가장 일반적으로 사용되는 버전은 1.0 / 1.1 > 대부분 브라우저는 초깃값으로 1.1 사용 (1.1은 1.0과 달리 요청이 강제적)

 

1-1-2. 웹 해킹 관련 요소

 

서버가 클라이언트에 전송한 인자 값에 추가 정보를 보낼 때 사용

 

 URL 주소에 나타난 호스트명을 자세하게 나타내기 위해 사용

 

URL 주소에 나타난 호스트명을 자세하게 나타내기 위해 사용

 

 GET 방식은 다음과 같이 요청 데이터에 대한 인수를 URL을 통해 웹 브라우저로 전송

>  링크 주소만 알아도 연결된 페이지의 내용 확인 가능

 

 

1-1-3. POST 메소드

  • URL에 요청 데이터를 전달하지 않고, HTTP의 헤더 영역이 아닌 보디 영역에 소켓을 이용하여 데이터를 전송한다.

  • 위의 '?hi_id=363' 부분이 없으며, URL을 통해 인수값을 전송하지 않아 다른 사람이 링크를 통해 해당 페이지를 볼 수 없다.

  • 보내려는 인자 값이 URL을 통해 노출되지 않아 보안 측면에서 GET 방식보다 안전한 편이다.

일반 게시판 경우, 목록이나 글을 보는 화면에는 접근 자유도 부여를 위해 GET 방식을 사용하고, 글을 저장 / 수정 / 삭제하는 작업 시에는 보안을 위해 POST 방식을 사용한다.

 

다음은 POST 메소드의 예이다.

 

[그림 3] POST 메소드 예

 

 

그 외 Request 메소드

  • HEAD : 서버 쪽 데이터를 검색, 요청하는 데 사용

  • OPTIONS : 자원에 대한 요구-응답 관계에서 관련 선택 사항에 대한 정보 요청 시 사용 > 클라이언트는 어느 것을 선택할지 결정 가능, 자원 관련 필요 사항 결정과 서버의 수행 능력도 볼 수 있음

  • PUT : 메시지 포함 데이터를 지정한 URI(Uniform resource identifier) 장소에 지정 이름으로 저장

  • DELETE : URI에 지정되있는 자원을 서버에서 지울 수 있게 함

  • TRACE : 요구 메시지의 최종 수신처까지 루프백 검사용으로 사용 > 클라이언트가 보내는 요구 메시지가 거쳐 가는 프록시 & 게이트웨이 중간 경로와 최종 수신 서버에 이르는 경로 알아낼 때 사용

 

1-2-1. Response (클라이언트가 보낸 Request의 응답 패킷)

  • Response 패킷에 담긴 주요 내용 > 서버에서 쓰이는 프로토콜 버전, HTTP 상태 코드 등이며, 전달 데이터 형식과 데이터 길이 등과 같은 추가 정보 포함

  • 헤더 정보 뒤에 빈 줄이 하나 들어감 > 그 다음 실제 데이터가 전달(실제 데이터는 HTML / 그림 파일) > 데이터 전달 종료 시에 서버 연결을 끊음

 

[표 1] HTTP 일반적인 상태코드

상태 코드 함축적 의미 설명
100번대 정보 전송

임시 응답을 나타내는 Status-Line과 선택적인 헤더로 이루어지고, 빈 줄로 끝을 맺음

HTTP 1.0까지는 계열에 대한 어떤 정의도 이루어지지 않았기 때문에 시험용 외에 서버 쪽의 추가 응답이 없음

200번대 성공 클라이언트 요청이 성공적 수신되어 처리 되었음을 의미
300번대 리다이렉션 클라이언트 요구 사항 처리를 위해 다른 곳에 있는 자원이 필요하다는 것을 의미
400번대 클라이언트 에러 클라이언트가 서버에 보내는 요구 메시지를 완전히 처리하지 못한 경우처럼 클라이언트 측에서 오류 발생을 의미
500번대 서버 에러 서버 자체에서 생긴 오류 상황이나 클라이언트의 요구 사항을 제대로 처리할 수 없을 때 발생

 

[그림 4] 상세 상태 코드

 

 

[표 2] HTTP 중요 상태 코드

상태 코드 의미
200 OK 클라이언트 요청이 성공
201 Created 클라이언트 PUT 요청이 성공적
301 Moved Permanently 브라우저 요청을 다른 URL로 항시 전달

다른 URL 정보는 Location 헤더에 나타남
302 Moved Temporarily 브라우저 요청을 임시 URL로 변경

Location 헤더에 임시로 변경한 URL 정보를 적음

클라이언트가 다음에 같은 요청 시, 기존 URL로 돌아감
304 Not Modified 브라우저가 서버 요청 자료에 대해 서버는 클라이언트 내에 복사된 캐시를 사용하면 된다를 의미

서버는 If-Modified-Since와 If-None-Match 요청 헤더를 사용하여 클라이언트가 가장 최근 자료를 가지고 있는지 확인
400 Bad Request 클라이언트가 서버에 잘못된 요청을 했다를 의미

예로, 클라이언트가 URL 주소 중간에 빈 공간을 넣는 등 부적절한 방법으로 서버 요청했을 시, 해당 응답 코드를 받음
401 Unauthorized 서버가 클라이언트 요청에 대해 HTTP 인증 확인을 요구하는 것을 의미
403 Forbidden 클라이언트 요청에 대한 접근 차단
404 Not Found 클라이언트가 서버에 요청한 자료가 존재하지 않음
405 Method Not Allowed 클라이언트가 요청에 이용한 메소드는 해당 URL에 지원이 불가능
413 Request Entity Too Large 클라이언트가 요청한 보디가 서버에서 처리하기에 너무 크다는 것을 의미
500 Internal Server Error 서버가 클라이언트 요청을 실행할 수 없을 때 발생

SQL 인젝션 취약점 확인 여부에 응용

 

HTTP 1.1은 계층적 프록시, 캐시, 지속적인 연결 필요성, 가상 호스트 등 영향 측면에서 HTTP 1.0에 비해 많이 개선되었다.

 

요즘 웹에서는 텍스트로만 된 문서를 찾아보기 어렵고 대부분 그림, 음악, 동영상 등이 함께 포함된다.

 

 

HTTP 1.0을 이용 > index.html 읽기

HTTP 1.0에서는 문서에 몇 개의 그림이 있든 상관없이 텍스트가 저장된 HTML 문서를 먼저 전송받은 후 연결을 끊고 다시 연결하여 그림을 전송받는다.

 

HTTP 1.1을 이용 > index.html 읽기

 

HTTP 1.1에서는 연결 요청이 계속 들어오면 HTML 문서를 받은 후 바로 그림 파일을 요청한다.


# Reference

 

https://www.hanbit.co.kr/store/books/look.php?p_code=B2924064192

+ Recent posts