HTTP 메시지 포맷
- HTTP 명세서(RFC)는 HTTP 메시지 포맷을 정의한다.
- 브라우저, 웹 서버, 네트워크 캐시 서버에 의해 삽입될 수 있는 헤더라인 정의
- 브라우저, 웹 서버, 네트워크 캐시 서버에 의해 삽입될 수 있는 헤더라인 정의
- 두 가지 HTTP 메시지가 존재 →
응답 메시지와
요청 메시지
HTTP 요청 메시지
예시를 통한 요청 메시지 분석
GET /somedir/page.html HTTP/1.1 // 요청 라인(request line)
// ---- 헤더 라인(header line)
Host : www.someschool.edu // 객체가 존재하는 호스트를 명시
Connection : close // 브라우저는 서버에게 지속 연결 사용을 원하지 않는다.
User-agent : Mozilla/5.0 // Mozilla/5.0 = 파이어 폭스 브라우저
Accept-language : fr // 프랑스어 버전을 원하고 있음
// -------------------------
- 메시지가 일반 ASCII 텍스트로 쓰여 있어 사람들이 읽을 수 있다.
- 메시지가 5줄이고, 각 줄은 CR(carriage return)과 LF(line feed)로 구별됨
- 마지막 줄에 추가 CR과 LF가 따른다.
- 요청 메시지는 더 많은 줄로 구성되거나 하나의 줄이 될 수도 있다.
요청 라인(request line)
: HTTP 요청 메시지의 첫 줄- 3개의 필드를 가짐 →
방식(method) 필드
URL 필드
HTTP 버전 빌드
방식 필드
: GET, POST, PUT, DELETE를 포함한 여러 가지 값을 가질 수 있음- HTTP 메시지의 대부분은 GET 방식 사용
- GET 방식 : 브라우저가 URL 필드로 식별되는 객체를 요청할 때 사용
- GET 방식 : 브라우저가 URL 필드로 식별되는 객체를 요청할 때 사용
- HTTP 메시지의 대부분은 GET 방식 사용
- 3개의 필드를 가짐 →
헤더 라인(header line)
: 요청 라인 이후의 라인- Host : www.someschool.edu
- 해당 라인이 제공하는 정보는 웹 프록시 캐시에서 필요로 함
- 해당 라인이 제공하는 정보는 웹 프록시 캐시에서 필요로 함
- Connection : close
- 브라우저는 서버에게 지속 연결 사용을 원하지 않는다.
→ 브라우저는 서버가 요청 객체를 보낸 후에 연결을 닫기를 원한다.
- 브라우저는 서버에게 지속 연결 사용을 원하지 않는다.
- User-agent
- 사용자 에이전트(서버)에게 요청을 하는 브라우저 타입을 명시
- 서버가 같은 객체에 대한 다른 버전을 다른 타입의 사용자 에이전트에게 보낼 수 있음
→ 각 버전은 같은 URL을 가진다.
- Accept-language : HTTP에서 사용 가능한 많은 콘텐츠 협상 헤더 중 하나
- 여기서는 사용자가 객체의 프랑스어 버전을 원함
- Host : www.someschool.edu
HTTP 요청 메시지의 일반 포맷
개체 몸체(entity body)
: 사용자가 폼 필드에 입력한 것을 포함- POST 방식에서 사용(GET 방식에서는 비어있음)
- HTTP 클라이언트는 사용자가 폼을 채워 넣을 때 POST 방식을 사용
- 사용자가 검색 엔진에 검색 단어를 넣을 때
- 웹 페이지의 특정 내용은 사용자가 폼 필드에 무엇을 입력하는가에 달려있음
- 폼으로 생성한 요구가 반드시 POST 방식을 사용할 필요는 없다.
- HTML 폼은 흔히 GET 방식을 사용하고 요청된 URL의 입력 데이터를 전송
- 예시 : 필드 입력값이 monkeys와 bananas일 경우
→ URL은 www.somesite.com/animalsearch?monkeys&bananas
- 예시 : 필드 입력값이 monkeys와 bananas일 경우
- HTML 폼은 흔히 GET 방식을 사용하고 요청된 URL의 입력 데이터를 전송
HEAD 방식
: 서버가 해당 방식의 요청을 받으면 HTTP 메시지로 응답하되, 요청 객체는 전송 X- 애플리케이션 개발자는 흔히 디버깅을 위해 해당 방식을 많이 사용
- 애플리케이션 개발자는 흔히 디버깅을 위해 해당 방식을 많이 사용
PUT 방식
: 웹 서버에 업로드할 객체를 필요로 하는 애플리케이션에 의해 사용DELETE 방식
: 사용자 또는 애플리케이션이 웹 서버에 있는 객체를 지우는 것을 허용
HTTP 응답 메시지
예시를 통한 응답 메시지 분석
HTTP/1.1 200 OK // 초기 상태 라인
// 헤더 라인 ----------------------------------
Connection : close
Date : Tue, 18 Aug 2015 15:44:04 GMT
Server : Apach/2.2.3 (CentOS)
Last-Modified : Tue, 18 Aug 2015 15:11:03 GMT
Content-Length : 6821
Content-Type : text/html
// ------------------------------------------
(데이터 데이터 데이터 데이터 데이터 ...) //개체 몸체
- 3개의 섹션으로 나누어져 있음 →
초기 상태 라인
, 6개의헤더라인,
개체몸체
- 개체 몸체는 요청 객체(데이터 데이터… 로 표현된 부분)를 포함한다.
- 상태 라인은 3개의 필드를 가진다.
- 프로토콜
버전 필드
상태 코드
해당 상태 메시지
- 해당 예시에서 상태 라인은 서버가 HTTP/1.1 사용, 모든 것이 양호(OK)
→ 서버가 요청 객체를 찾아서 보내고 있음을 알려줌
- 프로토콜
- 서버가 사용하는 헤더 라인 분석
Connect: close
: 클라이언트에게 메시지를 보낸 후 TCP 연결을 닫는 데 사용Date
: HTTP 응답이 서버에 의해 생성되고 보낸 날짜와 시간을 나타냄- 서버가 파일 시스템으로부터 객체를 추출하고
응답 메시지에 그 객체를 삽입하여 응답 메시지를 보낸 시간을 의미
- 서버가 파일 시스템으로부터 객체를 추출하고
Server
: 메시지가 아파치 웹 서버에 의해 만들어졌음을 나타냄- HTTP 요청 메시지의 User-agent: 헤더라인과 비슷
- HTTP 요청 메시지의 User-agent: 헤더라인과 비슷
Last-Modified
: 객체가 생성되거나 마지막으로 수정된 시간과 날짜를 나타냄Content-Length
: 송신되는 객체의 바이트 수를 나타냄Content-Type
: 개체 몸체 내부의 객체가 HTML 텍스트인 것을 나타냄
HTTP 응답 메시지의 일반 포맷
- 상태 코드와 연관 문장
200 OK
: 요청이 성공했고, 정보가 응답으로 보내졌다.301 Moved Permanently
: 요청 객체가 영원히 이동되었다.- 새로운 URL은 응답 메시지의 Location: 헤더에 나와 있음
- 클라이언트 소프트웨어는 자동으로 새로운 URL을 추출한다.
400 Bad Request
: 서버가 요청을 이해할 수 없다는 일반 오류 코드404 Not Found
: 요청 문서가 서버에 존재하지 않는다.505 HTTP Version Not Supported
: 요청 HTTP 프로토콜 버전을 서버기 지원 X