[Web] HTTP 기본 개념
(1) HTTP (HyperText Transfer Protocol)
-
인터넷에서는 FTP, Telnet, HTTP, SMTP, POP 등 여러 프로토콜 사용 > 가장 많이 사용하는 프로토콜
-
문서 간의 상호 연결 > 다양한 텍스트, 그래픽, 애니메이션을 화면에 보여주고, 사운드를 재생해 줌
-
전 세계의 수많은 정보를 탐색하기 위해 HTTP 이용
-
RFC 1945 문서 > HTTP는 0.9 버전부터 사용 > 단순히 읽기 기능만 지원
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 (웹 서버에 데이터를 요청하는 패킷)
일반적으로 첫 번째 줄에는 다음과 같은 내용이 들어간다.
-
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 메소드의 예이다.
그 외 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번대 | 서버 에러 | 서버 자체에서 생긴 오류 상황이나 클라이언트의 요구 사항을 제대로 처리할 수 없을 때 발생 |
[표 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에서는 문서에 몇 개의 그림이 있든 상관없이 텍스트가 저장된 HTML 문서를 먼저 전송받은 후 연결을 끊고 다시 연결하여 그림을 전송받는다.
HTTP 1.1에서는 연결 요청이 계속 들어오면 HTML 문서를 받은 후 바로 그림 파일을 요청한다.
# Reference
https://www.hanbit.co.kr/store/books/look.php?p_code=B2924064192