앞서 저번주에 HTTP에 대하여 간략하게 공부하였습니다. 오늘은 조금 더 들어가서 HTTP의 구조에 대해 알아보겠습니다.
HTTP는 헤더와 바디로 구성되어 있습니다.
헤더는 웹 서버 및 클라이언트 사이에서, 일반 문서 데이터 외에 추가적인 정보를 교환할 수 있도록 맨 앞에 삽입되는 요소입니다. 종류가 굉장히 다양합니다.
바디는 실제 HTTP의 내용이 들어가는 부분입니다. 일반 텍스트 형태 외에도 이진 데이터 형식도 가능합니다.
헤더와 바디는 개행(CR+LF)으로 구분을 합니다.
헤더는 요청 헤더(Request Header), 응답 헤더(Response Header), 일반 헤더(General Header), 엔티티 헤더(Entity Header) 총 4가지로 구성되어 있다.
1. 요청 헤더(Request Header)
요청 메시지 내에서만 나타나며 가장 양이 많습니다.
- From : 클라이언트 사용자 메일 주소
- Cookie : 서버에 의해 Set-Cookie로 클라이언트에게 설정된 쿠키 정보
- Referer : 바로 직전에 머물렀던 웹 링크 주소
- User-Agent : 클라이언트 S/W(브라우저) 명칭 및 버전 정보
- Accept : 클라이언트 자신이 이해 가능한 미디어 타입 및 우선순위
- Accept-Charset : 클라이언트 자신이 이해 가능한 문자 인코딩 방식
- Accept-Encoding : 클라이언트 자신이 이해 가능한 압축 방식
- Accept-Language : 클라이언트 자신이 이해 가능한 언어
- Host : 요청하는 호스트에 대한 호스트 명 및 포트 번호
- If-Modified-Since : 제시한 시간 이후에만 해당 리소스를 취득 요청
2. 응답 헤더(Response Header)
특정 유형의 HTTP 요청이나 특정 헤더를 수신했을때 나타납니다.
- Server : 서버 S/W 정보를 나타냄
- Set-Cookie : 서버 측에서 클라이언트에게 세션 쿠키 정보를 설정
- Expires : 지정된 일시까지 응답이 캐시로써 유효함
- Location : 리다이렉트 할때 이동 주소 혹은 새로 생성된 리소스 주소
- Allow : 해당 리소스가 지원 가능한 HTTP 메소드들을 나타냄
- Accept-Range : URI를 위한 요청 범위의 승인을 나타냄
- Age : 해당 문서의 나이를 나타냄
- ETag : 요청된 변종 엔티티 태그의 현재 값을 제공
- Proxy-authenticate : 현재 연결에 대해 프록시에 대한 적용할 수 있는 매개변수를 나타냄
3. 일반 헤더(General Header)
요청 및 응답 메시지 모두에서 사용 가능
- Date : 메시지를 생성한 날짜
- Connection : 클라이언트와 서버가 요청/응답 연결에 대한 옵션을 정하게 해줌
- Cache-Control : 메시지와 함께 캐시 지시자를 전달하기 위해 사용
- Pragma : 메시지와 함께 캐시 지시자를 전달하기 위해 사용(HTTP 1.1 버전에서는 사용 안함
- Trailer : 헤더 필드가 chunked transfer coding으로 인코딩 된 메시지의 trailer에서 표현된다는 것을 나타내는 필드
4. 엔티티 헤더(Entity Header)
메시지 내에 포함된 엔티티에 대한 구체적인 설명 등
- Content-Encoding : 개체 데이터의 압축 방식
- Content-Type : 개체에 포함되는 미디어 타입 정보
- Content-Language : 개체와 가장 잘 어울리는 언어
- Content-Length : 전달되는 메시지의 바이트 길이 또는 크기
HTTP 메소드는 저번주에 조금 봤기 때문에 HTTP 상태코드를 보겠습니다. HTTP 상태코드는 HTTP의 응답 메시지의 첫째 줄에 결과 응답 상태에서 서버가 코드 값을 알려주는 것입니다. 코드는 크게 1xx(처리중), 2xx(성공), 3xx(리다이렉트), 4xx(클라이언트 에러), 5xx(서버 에러) 5개로 분류되며 해당 분류 마다 굉장히 많은 종류가 있습니다.(-> IAMA 공식 HTTP Status Code Registry)
그 중에서 평소에도 흔히 볼 수있는 몇가지 상태코드만 확인해보겠습니다.
- 3xx (리다이렉트)
301 Move Permanently (영구 이동됨)
302 Found (일시 이동됨)
303 See Other (일시 이동된 사이트에 가서, GET 메소드로 리소스를 얻음)
304 Not Modified (리다이렉트와는 별 관련 없음)
307 Temperary Redirect (302와 의미적으로 같음)
- 4xx (클라이언트 에러)
400 Bad Request (요청 오류)
401 Unauthorized (권한 없음)
403 Forbidden (금지됨)
404 Not Found (발견되지 않음, 요청 리소스 없음)
- 5xx (서버 에러)
500 Internal Server Error (서버 내부 오류)
502 Bad Gateway (접속한 프록시 서버에서 내부 망의 웹서버로부터 잘못된 응답을 받음)
503 Service Unavailable (서비스 불가)
이상으로 HTTP 구조 정보에 대해 공부해보았습니다. 다음엔 쿠키와 세션에 관하여 공부해보겠습니다. 감사합니다.
'Web Hacking > 이론적인 내용' 카테고리의 다른 글
OWASP Top 10 2017 (0) | 2017.07.10 |
---|---|
쿠키(Cookie)란? (0) | 2017.07.07 |
Session이란? (0) | 2017.06.26 |
HTTP 개요 (0) | 2017.06.12 |
Web 개요 (0) | 2017.06.05 |