Upload
choonghyun-yang
View
267
Download
5
Embed Size (px)
Citation preview
HTTP 완벽가이드 3장. HTTP 메시지
yarn.choong
메시지의 각 부분
HTTP/1.0 200 OK
Content-type : text/plain Content-length: 19
Hellow World!
시작줄
Header
body
• 시작줄과 header는 줄단위로 분리된 문자열 (CRLF로 구분) • body는 선택적인 데이터 덩어리, 이진데이터 포함가능 하고 비어 있을 수 있다.
메시지 문법
• 모든 HTTP 메시지는 요청 or 응답 메시지로 구분.
• 요청 메시지의 형식 <method> <request URL> <version> GET /specials/saw-blade.gif HTTP/1.0
<header> HOST: www.joes-hardware.com
<body> GET Method는 body를 가질수 없음
• 응답 메시지의 형식 <version> <HTTP status code> <사유구절> HTTP/1.0 200 OK
<header> Content-Type: image/gif
<body> image data
Start-line(request-line)
• Request start-line
– 어떤 동작이 일어나야 하는지 설명해주는 Method
– 동작에 대상을 지칭하는 요청 URL
– HTTP Version
– 모든 필드는 공백으로 구분한다.
Request-Line = Method Request-URI HTTP-Version CRLF
GET /test/hi-there.txt HTTP/1.1
Start-line(status-line)
• Response start-line
– 수행결과에 대한 상태정보
– Http의 version
– 숫자로 된 http status code
– 수행 상태에 대해 설명해주는 Text
Status-Line = HTTP-Version Status-Code Reason-Phrase CRLF
HTTP/1.0 200 OK
method
• 요청의 시작줄은 method로 시작 • GET (select)
– 서버에서 어떤 문서를 가져온다. (body를 가질 수 없음)
• POST (insert) – 서버가 처리해야 데이터를 보낸다
• PUT (update) – 서버에 요청 메시지의 본문을 저장한다.
• DELETE (delete) – 서버에서 문서를 제거한다. (body를 가질 수 없음)
• 그 외에도 HEAD, TRACE, OPTIONS, extension-method
Status code
• 상태코드는 응답의 시작줄에 위치. • 상태코드들은 3자리 숫자. • 100-199
– 정보 관련 상태 정보, 100-101 정의 되어 있음.
• 200-299 – 성공 관련 상태 정보, 200-206 정의 되어 있음.
• 300-399 – 리다이렉션 관련 상태 정보, 300-305 정의 되어 있음.
• 400-499 – 클라이언트 에러 관련 상태 정보, 400-415 정의 되어 잇음.
• 500-599 – 서버 에러 관련 상태 정보, 500-505 정의 되어 잇음.
사유구절(Reason-Phrase)
• 응답 시작줄의 마지막 구성요소
• 상태코드에 대한 설명 글.
• 상태 코드 와 1:1로 대응.
버전번호
• 버전번호는 HTTP/x.y 형식으로 요청과 응답메시지 양쪽 모두 기술
• HTTp/1.1 이라고 해서 그 메시지가 1.1 메시지가 아니다, 보낸측에서 1.1 version까지 지원 가능하다는 의미이다.
• 또한 version은 <major>.<minor>으로 따로 구분된다. 예를 들어 1.2, 1.12 가 있다고 하면 1.2 보다 1.12가 더 높은 version이다.
Header
• 요청/응답에 대해 추가정보 • 이름/값 쌍으로 이루어진다. • 일반 header
– 요청과 응답 양쪽 모두 사용가능
• Request header • Response header • Entity Header
– 본문 크기와 contents, resource 를 서술.
• Extension header – 명세에 정의되지 않은 새로운 header
Method-GET
• 리소스 요청 용도
GET /seasonal/index0fall.html HTTP/1.1 Host: www.joes-hareware.com Accept: *
HTTP/1.1 200 OK Content-Type: text/html Content-Length: 617 <htm>…..
Method-HEAD
• GET 처럼 해동하지만, 서버는 Header 값만 돌려준다. • 서버 개발자는 반드시 GET과 동일하게 개발 해야한다. 단 Body는 반환되지 않게 처리.
HEAD /seasonal/index0fall.html HTTP/1.1 Host: www.joes-hareware.com Accept: *
HTTP/1.1 200 OK Content-Type: text/html Content-Length: 617
Method-PUT
• PUT method의 의미는 서버가 요청의 본문을 가지고 요청 URL의 이름대로 새문서를 만들거나, 이미 URL이 존재 하면 본문을 교체 하는것 이다.
PUT /seasonal/index0fall.html HTTP/1.1 Host: www.joes-hareware.com Content-Type: text/plain Content-Length: 617 Update product list comming
HTTP/1.1 201 Created Location: http://www.joes-hardware.com/product-list.txt Content-Type: text/plain Content-Length: 617 http://www.joes-hardware.com/product-list.txt
Method-POST
• Post method는 서버에 입력 데이터를 전송하기 위해 설계.
POST /seasonal/index0fall.html HTTP/1.1 Host: www.joes-hareware.com Content-Type: text/plain Content-Length: 617 Item=bandsaw 2647
HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 617 The bandsaw model 2647 is in stock
Method-OPTIONS
• 특정 리소스에 어떤 method가 지원하는지 확인 가능.
OPTIONS/seasonal/index0fall.html HTTP/1.1 Host: www.joes-hareware.com Accept: *
HTTP/1.1 200 OK Allow: GET,POST, PUT Content-Length: 0
Method-DELETE
• 리소스 삭제를 요청.
DELETE /seasonal/index0fall.html HTTP/1.1 Host: www.joes-hareware.com
HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 617 I have your delete request
상태코드 100-199 정보성
• HTTP/1.1에 도입
• 100 Continue
– 요청의 시작 부분을 일부가 받아 들어졌으며, 클라이언트는 나머지를 계속 이어서 보내야 함을 의미한다.
• 101 Switching Protocols
– 클라이언트가 Upgrade 헤더에 나열한 것 중 하나로 서버가 프로토콜을 바꾸었음을 의미한다.
상태코드 200-299 성공
• 200 OK
• 201 Created
• 202 Accepted
• 203 Non-Authoritative Information
• 204 No Content
• 205 Reset Content
• 206 Partial Content
상태코드 300-399 리다이렉션
• 300 Multiple choices
• 301 Moved Permanently
• 302 Found
• 303 See Other
• 304 Not Modified
• 305 Use Proxy
• 307 Temporary Redirect
상태코드 400-499 클라이언트 에러
• 400 Bad Request
• 401 Unauthorized
• 403 Forbidden
• 404 Not Found
• 405 Method Not Allowed
• 408 Request Timeout
• 415 Unsupported Media Type
상태코드 500-599 서버에러
• 500 Internal Server Error
• 501 Not Implemented
• 502 Bad Gateway
• 503 Service Unavailable
• 504 Gateway Timeout
• 505 HTTP version Not supported
일반 Header
• 메시지에 대한 기본적인 정보를 제공.
• Connection
• Date
• MIME-Version
• Trailer chunked transfer
• Transfer-Encoding
• Upgrade
• Via
일반 Cache header
• HTTP/1.0은 HTTP application에게 매번 원 서버로부터 객체를 가져오는 대신 로컬 복사본으로 캐시 할 수 있도록 해주는 최초의 Header를 도입.
• Cache-Control
– 메시지와 함께 캐시 지시자를 전달하기 위해 사용.
• Pragma
– 메시지와 함께 지시자를 전달하는 또다른 방법, 캐시에 국한되지 않는다.
Request Header
• Client-IP • From • Host • Referer • UA-Color • UA-CPU • UA-Disp • UA-OS • UA-Pixels • User-Agent
Accept Header
• 클라이언트가 무엇을 원하는지 혹은 원치 않은 것이 무엇인지 알려줄 수있다.
• Accept
• Accept-Charset
• Accept-Encoding
• Accept-Language
• TE
조건부 Request Header
• 요청에 대한 제약 – 예를 들어 특정 문서를 요청 할 때 자신이 가지고 있는 사본과 다를 경우 전송해달라고 요청 할 수 있다.
• Except • If-Match • If-Modified-Since • If-None-Match • If-Range • If-Unmodified-Since • Range
요청 보안헤더
• 요청을 위한 간단 인증요구/응답 체계를 가지고 있음.
• 리소스에 접근하기 전에 자신을 인증함으로 트랜잭션을 더 안전하게 만들기 위해서.
• Authorization
• Cookie
• Cookie2
Proxy Request Header
• Proxy를 돕기 위한 헤더
• Max-Forwards
– 요청이 원 서버로 향하는 과정에서 다른 프락시나 게이트로 전달 될 수 있는 최대 횟수.TRACE method와 함께 사용된다.
• Proxy-Authorization
– Authorization과 같으나 프락시에서 인증을 할 때 사용.
• Proxy-Connection
– Connection과 같으나 프락시에 연결을 맺을 때 사용.
Response Header
• 응답의 대한 부가정보 제공.
• Age
• Public
• Retry-After
• Server
• Title
• Warming
Entity Header
• 요청과 응답 모두 Entity Header를 가질 수 있다.
• Allow
– 수행 될 수 있는 요청 메소드들을 나열한다.
• Location
– Client에게 엔티티가 실제로 어디에 위치하고 있는지 설명한다.
– 수신자에게 리소스에 대한 새로운 위치를 알려줄때 사용한다.
Content header
• 콘테츠 헤더는 엔티티의 콘테츠에 대한 구체적인 정보를 제공. • Content-Base • Content-Encoding • Content-Language • Content-Length • Content-Location • Content-MD5 • Content-Range • Content-Type
Entity caching header
• 엔티티 캐싱에 대한 정보를 제공
– 리소스에 대해 캐시된 사본이 아직 유효한지에 대한 정보.
• Etag
– 이 엔티티에 대한 엔티티 태그
• Expires
– 더 이상 유효하지 않아 원본을 다시 받아 와야하는 일시
• Last-Modified
– 가장 최근 변경 일시