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
– 가장 최근 변경 일시

Http 완벽가이드(3장 http 메시지)

  • 1.
    HTTP 완벽가이드 3장. HTTP메시지 yarn.choong
  • 2.
    메시지의 각 부분 HTTP/1.0200 OK Content-type : text/plain Content-length: 19 Hellow World! 시작줄 Header body • 시작줄과 header는 줄단위로 분리된 문자열 (CRLF로 구분) • body는 선택적인 데이터 덩어리, 이진데이터 포함가능 하고 비어 있을 수 있다.
  • 3.
    메시지 문법 • 모든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
  • 4.
    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
  • 5.
    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
  • 6.
    method • 요청의 시작줄은method로 시작 • GET (select) – 서버에서 어떤 문서를 가져온다. (body를 가질 수 없음) • POST (insert) – 서버가 처리해야 데이터를 보낸다 • PUT (update) – 서버에 요청 메시지의 본문을 저장한다. • DELETE (delete) – 서버에서 문서를 제거한다. (body를 가질 수 없음) • 그 외에도 HEAD, TRACE, OPTIONS, extension-method
  • 7.
    Status code • 상태코드는응답의 시작줄에 위치. • 상태코드들은 3자리 숫자. • 100-199 – 정보 관련 상태 정보, 100-101 정의 되어 있음. • 200-299 – 성공 관련 상태 정보, 200-206 정의 되어 있음. • 300-399 – 리다이렉션 관련 상태 정보, 300-305 정의 되어 있음. • 400-499 – 클라이언트 에러 관련 상태 정보, 400-415 정의 되어 잇음. • 500-599 – 서버 에러 관련 상태 정보, 500-505 정의 되어 잇음.
  • 8.
    사유구절(Reason-Phrase) • 응답 시작줄의마지막 구성요소 • 상태코드에 대한 설명 글. • 상태 코드 와 1:1로 대응.
  • 9.
    버전번호 • 버전번호는 HTTP/x.y형식으로 요청과 응답메시지 양쪽 모두 기술 • HTTp/1.1 이라고 해서 그 메시지가 1.1 메시지가 아니다, 보낸측에서 1.1 version까지 지원 가능하다는 의미이다. • 또한 version은 <major>.<minor>으로 따로 구분된다. 예를 들어 1.2, 1.12 가 있다고 하면 1.2 보다 1.12가 더 높은 version이다.
  • 10.
    Header • 요청/응답에 대해추가정보 • 이름/값 쌍으로 이루어진다. • 일반 header – 요청과 응답 양쪽 모두 사용가능 • Request header • Response header • Entity Header – 본문 크기와 contents, resource 를 서술. • Extension header – 명세에 정의되지 않은 새로운 header
  • 11.
    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>…..
  • 12.
    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
  • 13.
    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
  • 14.
    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
  • 15.
    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
  • 16.
    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
  • 17.
    상태코드 100-199 정보성 •HTTP/1.1에 도입 • 100 Continue – 요청의 시작 부분을 일부가 받아 들어졌으며, 클라이언트는 나머지를 계속 이 어서 보내야 함을 의미한다. • 101 Switching Protocols – 클라이언트가 Upgrade 헤더에 나열한 것 중 하나로 서버가 프로토콜을 바꾸 었음을 의미한다.
  • 18.
    상태코드 200-299 성공 •200 OK • 201 Created • 202 Accepted • 203 Non-Authoritative Information • 204 No Content • 205 Reset Content • 206 Partial Content
  • 19.
    상태코드 300-399 리다이렉션 •300 Multiple choices • 301 Moved Permanently • 302 Found • 303 See Other • 304 Not Modified • 305 Use Proxy • 307 Temporary Redirect
  • 20.
    상태코드 400-499 클라이언트에러 • 400 Bad Request • 401 Unauthorized • 403 Forbidden • 404 Not Found • 405 Method Not Allowed • 408 Request Timeout • 415 Unsupported Media Type
  • 21.
    상태코드 500-599 서버에러 •500 Internal Server Error • 501 Not Implemented • 502 Bad Gateway • 503 Service Unavailable • 504 Gateway Timeout • 505 HTTP version Not supported
  • 22.
    일반 Header • 메시지에대한 기본적인 정보를 제공. • Connection • Date • MIME-Version • Trailer chunked transfer • Transfer-Encoding • Upgrade • Via
  • 23.
    일반 Cache header •HTTP/1.0은 HTTP application에게 매번 원 서버로부터 객체를 가져오는 대신 로컬 복사본으로 캐시 할 수 있도록 해주는 최초의 Header를 도입. • Cache-Control – 메시지와 함께 캐시 지시자를 전달하기 위해 사용. • Pragma – 메시지와 함께 지시자를 전달하는 또다른 방법, 캐시에 국한되지 않는다.
  • 24.
    Request Header • Client-IP •From • Host • Referer • UA-Color • UA-CPU • UA-Disp • UA-OS • UA-Pixels • User-Agent
  • 25.
    Accept Header • 클라이언트가무엇을 원하는지 혹은 원치 않은 것이 무엇인지 알려줄 수 있다. • Accept • Accept-Charset • Accept-Encoding • Accept-Language • TE
  • 26.
    조건부 Request Header •요청에 대한 제약 – 예를 들어 특정 문서를 요청 할 때 자신이 가지고 있는 사본과 다를 경우 전송해달 라고 요청 할 수 있다. • Except • If-Match • If-Modified-Since • If-None-Match • If-Range • If-Unmodified-Since • Range
  • 27.
    요청 보안헤더 • 요청을위한 간단 인증요구/응답 체계를 가지고 있음. • 리소스에 접근하기 전에 자신을 인증함으로 트랜잭션을 더 안전하게 만들기 위해서. • Authorization • Cookie • Cookie2
  • 28.
    Proxy Request Header •Proxy를 돕기 위한 헤더 • Max-Forwards – 요청이 원 서버로 향하는 과정에서 다른 프락시나 게이트로 전달 될 수 있는 최대 횟수.TRACE method와 함께 사용된다. • Proxy-Authorization – Authorization과 같으나 프락시에서 인증을 할 때 사용. • Proxy-Connection – Connection과 같으나 프락시에 연결을 맺을 때 사용.
  • 29.
    Response Header • 응답의대한 부가정보 제공. • Age • Public • Retry-After • Server • Title • Warming
  • 30.
    Entity Header • 요청과응답 모두 Entity Header를 가질 수 있다. • Allow – 수행 될 수 있는 요청 메소드들을 나열한다. • Location – Client에게 엔티티가 실제로 어디에 위치하고 있는지 설명한다. – 수신자에게 리소스에 대한 새로운 위치를 알려줄때 사용한다.
  • 31.
    Content header • 콘테츠헤더는 엔티티의 콘테츠에 대한 구체적인 정보를 제공. • Content-Base • Content-Encoding • Content-Language • Content-Length • Content-Location • Content-MD5 • Content-Range • Content-Type
  • 32.
    Entity caching header •엔티티 캐싱에 대한 정보를 제공 – 리소스에 대해 캐시된 사본이 아직 유효한지에 대한 정보. • Etag – 이 엔티티에 대한 엔티티 태그 • Expires – 더 이상 유효하지 않아 원본을 다시 받아 와야하는 일시 • Last-Modified – 가장 최근 변경 일시