欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTP1.1 Notes 2, Protocol Parameters 博客分类: Infrastructure 百度SchemeSUNCC++ 

程序员文章站 2024-02-22 16:25:28
...
HTTP Version
       HTTP-Version   = "HTTP" "/" 1*DIGIT "." 1*DIGIT

Uniform Resource Identifiers
As far as HTTP is concerned, Uniform Resource Identifiers are simply formatted strings which identify--via name, location, or any other characteristic--a resource.

       http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

If the port is empty or not given, port 80 is assumed.

A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle

If the abs_path is not present in the URL, it MUST be given as "/" when used as a Request-URI for a resource

URI Comparison:
  - A port that is empty or not given is equivalent to the default port for that URI-reference;
  - Comparisons of host names MUST be case-insensitive;
  - Comparisons of scheme names MUST be case-insensitive;
  - An empty abs_path is equivalent to an abs_path of "/".

Characters other than those in the "reserved" and "unsafe" sets (RFC 2396) are equivalent to their ""%" HEX HEX" encoding.

       escaped     = "%" hex hex
       hex         = digit | "A" | "B" | "C" | "D" | "E" | "F" |
                            "a" | "b" | "c" | "d" | "e" | "f"

Date/Time Formats
Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format

HTTP/1.1 clients and servers that parse the date value MUST accept all three formats (for compatibility with HTTP/1.0), though they MUST only generate the RFC 1123 format for representing HTTP-date values in header fields.

All HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT), without exception.

       HTTP-date    = rfc1123-date | rfc850-date | asctime-date
       rfc1123-date = wkday "," SP date1 SP time SP "GMT"
       rfc850-date  = weekday "," SP date2 SP time SP "GMT"
       asctime-date = wkday SP date3 SP time SP 4DIGIT
       date1        = 2DIGIT SP month SP 4DIGIT
                      ; day month year (e.g., 02 Jun 1982)
       date2        = 2DIGIT "-" month "-" 2DIGIT
                      ; day-month-year (e.g., 02-Jun-82)
       date3        = month SP ( 2DIGIT | ( SP 1DIGIT ))
                      ; month day (e.g., Jun  2)
       time         = 2DIGIT ":" 2DIGIT ":" 2DIGIT
                      ; 00:00:00 - 23:59:59
       wkday        = "Mon" | "Tue" | "Wed"
                    | "Thu" | "Fri" | "Sat" | "Sun"
       weekday      = "Monday" | "Tuesday" | "Wednesday"
                    | "Thursday" | "Friday" | "Saturday" | "Sunday"
       month        = "Jan" | "Feb" | "Mar" | "Apr"
                    | "May" | "Jun" | "Jul" | "Aug"
                    | "Sep" | "Oct" | "Nov" | "Dec"

       delta-seconds  = 1*DIGIT

Character Sets
       charset = token

HTTP character sets are identified by case-insensitive tokens
The complete set of tokens is defined by the IANA Character Set registry

Content Codings
       content-coding   = token

All content-coding values are case-insensitive
HTTP/1.1 uses content-coding values in the Accept-Encoding and Content-Encoding header fields.

The Internet Assigned Numbers Authority (IANA) acts as a registry for content-coding value tokens. Initially, the registry contains the following tokens:
gzip
compress
deflate
identity(default encoding, use no transformation)

Transfer Codings
       transfer-coding         = "chunked" | transfer-extension
       transfer-extension      = token *( ";" parameter )

Transfer-coding values are used to indicate an encoding transformation that has been, can be, or may need to be applied to an entity-body in order to ensure "safe transport" through the network.
This differs from a content coding in that the transfer-coding is a property of the message, not of the original entity.
All transfer-coding values are case-insensitive. HTTP/1.1 uses transfer-coding values in the TE header field and in the Transfer-Encoding header field

The Internet Assigned Numbers Authority (IANA) acts as a registry for transfer-coding value tokens. Initially, the registry contains the following tokens:
chunked
identity
gzip
compress
deflate

A server which receives an entity-body with a transfer-coding it does not understand SHOULD return 501 (Unimplemented), and close the connection.

Media Types
       media-type     = type "/" subtype *( ";" parameter )
       type           = token
       subtype        = token

The type, subtype, and parameter attribute names are case- insensitive.
Linear white space (LWS) MUST NOT be used between the type and subtype, nor between an attribute and its value.

Note: The "multipart/form-data" type has been specifically defined
      for carrying form data suitable for processing via the POST
      request method, as described in RFC 1867

Product Tokens
       product         = token ["/" product-version]
       product-version = token

Examples:

       User-Agent: CERN-LineMode/2.15 libwww/2.17b3
       Server: Apache/0.8.4

Quality Values
       qvalue         = ( "0" [ "." 0*3DIGIT ] )
                      | ( "1" [ "." 0*3("0") ] )

HTTP content negotiation uses short "floating point" numbers to indicate the relative importance ("weight") of various negotiable parameters.
A weight is normalized to a real number in the range 0 through 1, where 0 is the minimum and 1 the maximum value.
If a parameter has a quality value of 0, then content with this parameter is `not acceptable' for the client.

Language Tags
        language-tag  = primary-tag *( "-" subtag )
        primary-tag   = 1*8ALPHA
        subtag        = 1*8ALPHA
A language tag identifies a natural language spoken, written, or otherwise conveyed by human beings for communication of information to other human beings.
HTTP uses language tags within the Accept-Language and Content- Language fields.
Example:
en, en-US, en-cockney, i-cherokee, x-pig-latin

Entity Tags
      entity-tag = [ weak ] opaque-tag
      weak       = "W/"
      opaque-tag = quoted-string
Entity tags are used for comparing two or more entities from the same requested resource.
HTTP/1.1 uses entity tags in the ETag , If-Match , If-None-Match , and If-Range header fields.


Range Utils
      range-unit       = bytes-unit | other-range-unit
      bytes-unit       = "bytes"
      other-range-unit = token

HTTP/1.1 allows a client to request that only part (a range of) the response entity be included within the response.
HTTP/1.1 uses range units in the Range and Content-Range header fields.


上一个百度的例子:
D:\projects\maui>curl -I http://www.baidu.com
HTTP/1.1 200 OK
Date: Wed, 24 Dec 2008 05:13:25 GMT
Server: BWS/1.0
Content-Length: 4064
Content-Type: text/html
Cache-Control: private
Expires: Wed, 24 Dec 2008 05:13:25 GMT
Set-Cookie: BAIDUID=C836D6EC630FBFE49ABAD74F7F62D2E1:FG=1; expires=Wed, 24-Dec-3
8 05:13:25 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "