RFC 2068. Hypertext Transfer Protocol -- HTTP/1.1

страница №6

ncludes the no-transform directive, an
intermediate cache or proxy MUST NOT change those headers that are
listed in section 13.5.2 as being subject to the no-transform
directive. This implies that the cache or proxy must not change any
aspect of the entity-body that is specified by these headers.

14.9.6 Cache Control Extensions

The Cache-Control header field can be extended through the use of one
or more cache-extension tokens, each with an optional assigned value.
Informational extensions (those which do not require a change in
cache behavior) may be added without changing the semantics of other
directives. Behavioral extensions are designed to work by acting as
modifiers to the existing base of cache directives. Both the new
directive and the standard directive are supplied, such that
applications which do not understand the new directive will default
to the behavior specified by the standard directive, and those that
understand the new directive will recognize it as modifying the
requirements associated with the standard directive. In this way,
extensions to the Cache-Control directives can be made without
requiring changes to the base protocol.

This extension mechanism depends on a HTTP cache obeying all of the
cache-control directives defined for its native HTTP-version, obeying
certain extensions, and ignoring all directives that it does not
understand.

For example, consider a hypothetical new response directive called
"community" which acts as a modifier to the "private" directive. We
define this new directive to mean that, in addition to any non-shared
cache, any cache which is shared only by members of the community
named within its value may cache the response. An origin server
wishing to allow the "UCI" community to use an otherwise private
response in their shared cache(s) may do so by including

Cache-Control: private, community="UCI"

A cache seeing this header field will act correctly even if the cache
does not understand the "community" cache-extension, since it will
also see and understand the "private" directive and thus default to
the safe behavior.



Fielding, et. al. Standards Track [Page 108]

RFC 2068 HTTP/1.1 January 1997


Unrecognized cache-directives MUST be ignored; it is assumed that any
cache-directive likely to be unrecognized by an HTTP/1.1 cache will
be combined with standard directives (or the response's default
cachability) such that the cache behavior will remain minimally
correct even if the cache does not understand the extension(s).

14.10 Connection

The Connection general-header field allows the sender to specify
options that are desired for that particular connection and MUST NOT
be communicated by proxies over further connections.

The Connection header has the following grammar:

Connection-header = "Connection" ":" 1#(connection-token)
connection-token = token

HTTP/1.1 proxies MUST parse the Connection header field before a
message is forwarded and, for each connection-token in this field,
remove any header field(s) from the message with the same name as the
connection-token. Connection options are signaled by the presence of
a connection-token in the Connection header field, not by any
corresponding additional header field(s), since the additional header
field may not be sent if there are no parameters associated with that
connection option. HTTP/1.1 defines the "close" connection option
for the sender to signal that the connection will be closed after
completion of the response. For example,

Connection: close

in either the request or the response header fields indicates that
the connection should not be considered `persistent' (section 8.1)
after the current request/response is complete.

HTTP/1.1 applications that do not support persistent connections MUST
include the "close" connection option in every message.

14.11 Content-Base

The Content-Base entity-header field may be used to specify the base
URI for resolving relative URLs within the entity. This header field
is described as Base in RFC 1808, which is expected to be revised.

Content-Base = "Content-Base" ":" absoluteURI

If no Content-Base field is present, the base URI of an entity is
defined either by its Content-Location (if that Content-Location URI
is an absolute URI) or the URI used to initiate the request, in that



Fielding, et. al. Standards Track [Page 109]

RFC 2068 HTTP/1.1 January 1997


order of precedence. Note, however, that the base URI of the contents
within the entity-body may be redefined within that entity-body.

14.12 Content-Encoding

The Content-Encoding entity-header field is used as a modifier to the
media-type. When present, its value indicates what additional content
codings have been applied to the entity-body, and thus what decoding
mechanisms MUST be applied in order to obtain the media-type
referenced by the Content-Type header field. Content-Encoding is
primarily used to allow a document to be compressed without losing
the identity of its underlying media type.

Content-Encoding = "Content-Encoding" ":" 1#content-coding

Content codings are defined in section 3.5. An example of its use is

Content-Encoding: gzip

The Content-Encoding is a characteristic of the entity identified by
the Request-URI. Typically, the entity-body is stored with this
encoding and is only decoded before rendering or analogous usage.

If multiple encodings have been applied to an entity, the content
codings MUST be listed in the order in which they were applied.

Additional information about the encoding parameters MAY be provided
by other entity-header fields not defined by this specification.

14.13 Content-Language

The Content-Language entity-header field describes the natural
language(s) of the intended audience for the enclosed entity. Note
that this may not be equivalent to all the languages used within the
entity-body.

Content-Language = "Content-Language" ":" 1#language-tag

Language tags are defined in section 3.10. The primary purpose of
Content-Language is to allow a user to identify and differentiate
entities according to the user's own preferred language. Thus, if the
body content is intended only for a Danish-literate audience, the
appropriate field is

Content-Language: da

If no Content-Language is specified, the default is that the content
is intended for all language audiences. This may mean that the sender



Fielding, et. al. Standards Track [Page 110]

RFC 2068 HTTP/1.1 January 1997


does not consider it to be specific to any natural language, or that
the sender does not know for which language it is intended.

Multiple languages MAY be listed for content that is intended for
multiple audiences. For example, a rendition of the "Treaty of
Waitangi," presented simultaneously in the original Maori and English
versions, would call for

Content-Language: mi, en

However, just because multiple languages are present within an entity
does not mean that it is intended for multiple linguistic audiences.
An example would be a beginner's language primer, such as "A First
Lesson in Latin," which is clearly intended to be used by an
English-literate audience. In this case, the Content-Language should
only include "en".

Content-Language may be applied to any media type — it is not
limited to textual documents.

14.14 Content-Length

The Content-Length entity-header field indicates the size of the
message-body, in decimal number of octets, sent to the recipient or,
in the case of the HEAD method, the size of the entity-body that
would have been sent had the request been a GET.

Content-Length = "Content-Length" ":" 1*DIGIT

An example is

Content-Length: 3495

Applications SHOULD use this field to indicate the size of the
message-body to be transferred, regardless of the media type of the
entity. It must be possible for the recipient to reliably determine
the end of HTTP/1.1 requests containing an entity-body, e.g., because
the request has a valid Content-Length field, uses Transfer-Encoding:
chunked or a multipart body.

Any Content-Length greater than or equal to zero is a valid value.
Section 4.4 describes how to determine the length of a message-body
if a Content-Length is not given.








Fielding, et. al. Standards Track [Page 111]

RFC 2068 HTTP/1.1 January 1997


Note: The meaning of this field is significantly different from the
corresponding definition in MIME, where it is an optional field
used within the "message/external-body" content-type. In HTTP, it
SHOULD be sent whenever the message's length can be determined
prior to being transferred.

14.15 Content-Location

The Content-Location entity-header field may be used to supply the
resource location for the entity enclosed in the message. In the case
where a resource has multiple entities associated with it, and those
entities actually have separate locations by which they might be
individually accessed, the server should provide a Content-Location
for the particular variant which is returned. In addition, a server
SHOULD provide a Content-Location for the resource corresponding to
the response entity.

Content-Location = "Content-Location" ":"
( absoluteURI | relativeURI )

If no Content-Base header field is present, the value of Content-
Location also defines the base URL for the entity (see section
14.11).

The Content-Location value is not a replacement for the original
requested URI; it is only a statement of the location of the resource
corresponding to this particular entity at the time of the request.
Future requests MAY use the Content-Location URI if the desire is to
identify the source of that particular entity.

A cache cannot assume that an entity with a Content-Location
different from the URI used to retrieve it can be used to respond to
later requests on that Content-Location URI. However, the Content-
Location can be used to differentiate between multiple entities
retrieved from a single requested resource, as described in section
13.6.

If the Content-Location is a relative URI, the URI is interpreted
relative to any Content-Base URI provided in the response. If no
Content-Base is provided, the relative URI is interpreted relative to
the Request-URI.










Fielding, et. al. Standards Track [Page 112]

RFC 2068 HTTP/1.1 January 1997


14.16 Content-MD5

The Content-MD5 entity-header field, as defined in RFC 1864 [23], is
an MD5 digest of the entity-body for the purpose of providing an
end-to-end message integrity check (MIC) of the entity-body. (Note: a
MIC is good for detecting accidental modification of the entity-body
in transit, but is not proof against malicious attacks.)

Content-MD5 = "Content-MD5" ":" md5-digest

md5-digest =

The Content-MD5 header field may be generated by an origin server to
function as an integrity check of the entity-body. Only origin
servers may generate the Content-MD5 header field; proxies and
gateways MUST NOT generate it, as this would defeat its value as an
end-to-end integrity check. Any recipient of the entity-body,
including gateways and proxies, MAY check that the digest value in
this header field matches that of the entity-body as received.

The MD5 digest is computed based on the content of the entity-body,
including any Content-Encoding that has been applied, but not
including any Transfer-Encoding that may have been applied to the
message-body. If the message is received with a Transfer-Encoding,
that encoding must be removed prior to checking the Content-MD5 value
against the received entity.

This has the result that the digest is computed on the octets of the
entity-body exactly as, and in the order that, they would be sent if
no Transfer-Encoding were being applied.

HTTP extends RFC 1864 to permit the digest to be computed for MIME
composite media-types (e.g., multipart/* and message/rfc822), but
this does not change how the digest is computed as defined in the
preceding paragraph.

Note: There are several consequences of this. The entity-body for
composite types may contain many body-parts, each with its own MIME
and HTTP headers (including Content-MD5, Content-Transfer-Encoding,
and Content-Encoding headers). If a body-part has a Content-
Transfer-Encoding or Content-Encoding header, it is assumed that
the content of the body-part has had the encoding applied, and the
body-part is included in the Content-MD5 digest as is — i.e.,
after the application. The Transfer-Encoding header field is not
allowed within body-parts.

Note: while the definition of Content-MD5 is exactly the same for
HTTP as in RFC 1864 for MIME entity-bodies, there are several ways



Fielding, et. al. Standards Track [Page 113]

RFC 2068 HTTP/1.1 January 1997


in which the application of Content-MD5 to HTTP entity-bodies
differs from its application to MIME entity-bodies. One is that
HTTP, unlike MIME, does not use Content-Transfer-Encoding, and does
use Transfer-Encoding and Content-Encoding. Another is that HTTP
more frequently uses binary content types than MIME, so it is worth
noting that, in such cases, the byte order used to compute the
digest is the transmission byte order defined for the type. Lastly,
HTTP allows transmission of text types with any of several line
break conventions and not just the canonical form using CRLF.
Conversion of all line breaks to CRLF should not be done before
computing or checking the digest: the line break convention used in
the text actually transmitted should be left unaltered when
computing the digest.

14.17 Content-Range

The Content-Range entity-header is sent with a partial entity-body to
specify where in the full entity-body the partial body should be
inserted. It also indicates the total size of the full entity-body.
When a server returns a partial response to a client, it must
describe both the extent of the range covered by the response, and
the length of the entire entity-body.

Content-Range = "Content-Range" ":" content-range-spec

content-range-spec = byte-content-range-spec

byte-content-range-spec = bytes-unit SP first-byte-pos "-"
last-byte-pos "/" entity-length

entity-length = 1*DIGIT

Unlike byte-ranges-specifier values, a byte-content-range-spec may
only specify one range, and must contain absolute byte positions for
both the first and last byte of the range.

A byte-content-range-spec whose last-byte-pos value is less than its
first-byte-pos value, or whose entity-length value is less than or
equal to its last-byte-pos value, is invalid. The recipient of an
invalid byte-content-range-spec MUST ignore it and any content
transferred along with it.










Fielding, et. al. Standards Track [Page 114]

RFC 2068 HTTP/1.1 January 1997


Examples of byte-content-range-spec values, assuming that the entity
contains a total of 1234 bytes:

o The first 500 bytes:

bytes 0-499/1234

o The second 500 bytes:

bytes 500-999/1234

o All except for the first 500 bytes:

bytes 500-1233/1234

o The last 500 bytes:

bytes 734-1233/1234

When an HTTP message includes the content of a single range (for
example, a response to a request for a single range, or to a request
for a set of ranges that overlap without any holes), this content is
transmitted with a Content-Range header, and a Content-Length header
showing the number of bytes actually transferred. For example,

HTTP/1.1 206 Partial content
Date: Wed, 15 Nov 1995 06:25:24 GMT
Last-modified: Wed, 15 Nov 1995 04:58:08 GMT
Content-Range: bytes 21010-47021/47022
Content-Length: 26012
Content-Type: image/gif

When an HTTP message includes the content of multiple ranges (for
example, a response to a request for multiple non-overlapping
ranges), these are transmitted as a multipart MIME message. The
multipart MIME content-type used for this purpose is defined in this
specification to be "multipart/byteranges". See appendix 19.2 for its
definition.

A client that cannot decode a MIME multipart/byteranges message
should not ask for multiple byte-ranges in a single request.

When a client requests multiple byte-ranges in one request, the
server SHOULD return them in the order that they appeared in the
request.

If the server ignores a byte-range-spec because it is invalid, the
server should treat the request as if the invalid Range header field



Fielding, et. al. Standards Track [Page 115]

RFC 2068 HTTP/1.1 January 1997


did not exist. (Normally, this means return a 200 response containing
the full entity). The reason is that the only time a client will make
such an invalid request is when the entity is smaller than the entity
retrieved by a prior request.

14.18 Content-Type

The Content-Type entity-header field indicates the media type of the
entity-body sent to the recipient or, in the case of the HEAD method,
the media type that would have been sent had the request been a GET.

Content-Type = "Content-Type" ":" media-type
Media types are defined in section 3.7. An example of the field is

Content-Type: text/html; charset=ISO-8859-4

Further discussion of methods for identifying the media type of an
entity is provided in section 7.2.1.

14.19 Date

The Date general-header field represents the date and time at which
the message was originated, having the same semantics as orig-date in
RFC 822. The field value is an HTTP-date, as described in section
3.3.1.

Date = "Date" ":" HTTP-date

An example is

Date: Tue, 15 Nov 1994 08:12:31 GMT

If a message is received via direct connection with the user agent
(in the case of requests) or the origin server (in the case of
responses), then the date can be assumed to be the current date at
the receiving end. However, since the date--as it is believed by the
origin--is important for evaluating cached responses, origin servers
MUST include a Date header field in all responses. Clients SHOULD
only send a Date header field in messages that include an entity-
body, as in the case of the PUT and POST requests, and even then it
is optional. A received message which does not have a Date header
field SHOULD be assigned one by the recipient if the message will be
cached by that recipient or gatewayed via a protocol which requires a
Date.







Fielding, et. al. Standards Track [Page 116]

RFC 2068 HTTP/1.1 January 1997


In theory, the date SHOULD represent the moment just before the
entity is generated. In practice, the date can be generated at any
time during the message origination without affecting its semantic
value.

The format of the Date is an absolute date and time as defined by
HTTP-date in section 3.3; it MUST be sent in RFC1123 [8]-date format.

14.20 ETag

The ETag entity-header field defines the entity tag for the
associated entity. The headers used with entity tags are described in
sections 14.20, 14.25, 14.26 and 14.43. The entity tag may be used
for comparison with other entities from the same resource (see
section 13.3.2).

ETag = "ETag" ":" entity-tag

Examples:

ETag: "xyzzy"
ETag: W/"xyzzy"
ETag: ""

14.21 Expires

The Expires entity-header field gives the date/time after which the
response should be considered stale. A stale cache entry may not
normally be returned by a cache (either a proxy cache or an user
agent cache) unless it is first validated with the origin server (or
with an intermediate cache that has a fresh copy of the entity). See
section 13.2 for further discussion of the expiration model.

The presence of an Expires field does not imply that the original
resource will change or cease to exist at, before, or after that
time.

The format is an absolute date and time as defined by HTTP-date in
section 3.3; it MUST be in RFC1123-date format:

Expires = "Expires" ":" HTTP-date










Fielding, et. al. Standards Track [Page 117]

RFC 2068 HTTP/1.1 January 1997


An example of its use is

Expires: Thu, 01 Dec 1994 16:00:00 GMT

Note: if a response includes a Cache-Control field with the max-age
directive, that directive overrides the Expires field.

HTTP/1.1 clients and caches MUST treat other invalid date formats,
especially including the value "0", as in the past (i.e., "already
expired").

To mark a response as "already expired," an origin server should use
an Expires date that is equal to the Date header value. (See the
rules for expiration calculations in section 13.2.4.)

To mark a response as "never expires," an origin server should use an
Expires date approximately one year from the time the response is
sent. HTTP/1.1 servers should not send Expires dates more than one
year in the future.

The presence of an Expires header field with a date value of some
time in the future on an response that otherwise would by default be
non-cacheable indicates that the response is cachable, unless
indicated otherwise by a Cache-Control header field (section 14.9).

14.22 From

The From request-header field, if given, SHOULD contain an Internet
e-mail address for the human user who controls the requesting user
agent. The address SHOULD be machine-usable, as defined by mailbox
in RFC 822 (as updated by RFC 1123 ):

From = "From" ":" mailbox

An example is:

From: webmaster@w3.org

This header field MAY be used for logging purposes and as a means for
identifying the source of invalid or unwanted requests. It SHOULD NOT
be used as an insecure form of access protection. The interpretation
of this field is that the request is being performed on behalf of the
person given, who accepts responsibility for the method performed. In
particular, robot agents SHOULD include this header so that the
person responsible for running the robot can be contacted if problems
occur on the receiving end.





Fielding, et. al. Standards Track [Page 118]

RFC 2068 HTTP/1.1 January 1997


The Internet e-mail address in this field MAY be separate from the
Internet host which issued the request. For example, when a request
is passed through a proxy the original issuer's address SHOULD be
used.

Note: The client SHOULD not send the From header field without the
user's approval, as it may conflict with the user's privacy
interests or their site's security policy. It is strongly
recommended that the user be able to disable, enable, and modify
the value of this field at any time prior to a request.

14.23 Host

The Host request-header field specifies the Internet host and port
number of the resource being requested, as obtained from the original
URL given by the user or referring resource (generally an HTTP URL,
as described in section 3.2.2). The Host field value MUST represent
the network location of the origin server or gateway given by the
original URL. This allows the origin server or gateway to
differentiate between internally-ambiguous URLs, such as the root "/"
URL of a server for multiple host names on a single IP address.

Host = "Host" ":" host [ ":" port ] ; Section 3.2.2

A "host" without any trailing port information implies the default
port for the service requested (e.g., "80" for an HTTP URL). For
example, a request on the origin server for
MUST include:

GET /pub/WWW/ HTTP/1.1
Host: www.w3.org

A client MUST include a Host header field in all HTTP/1.1 request
messages on the Internet (i.e., on any message corresponding to a
request for a URL which includes an Internet host address for the
service being requested). If the Host field is not already present,
an HTTP/1.1 proxy MUST add a Host field to the request message prior
to forwarding it on the Internet. All Internet-based HTTP/1.1 servers
MUST respond with a 400 status code to any HTTP/1.1 request message
which lacks a Host header field.

See sections 5.2 and 19.5.1 for other requirements relating to Host.

14.24 If-Modified-Since

The If-Modified-Since request-header field is used with the GET
method to make it conditional: if the requested variant has not been
modified since the time specified in this field, an entity will not



Fielding, et. al. Standards Track [Page 119]

RFC 2068 HTTP/1.1 January 1997


be returned from the server; instead, a 304 (not modified) response
will be returned without any message-body.

If-Modified-Since = "If-Modified-Since" ":" HTTP-date

An example of the field is:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

A GET method with an If-Modified-Since header and no Range header
requests that the identified entity be transferred only if it has
been modified since the date given by the If-Modified-Since header.
The algorithm for determining this includes the following cases:

a)If the request would normally result in anything other than a 200
(OK) status, or if the passed If-Modified-Since date is invalid, the
response is exactly the same as for a normal GET. A date which is
later than the server's current time is invalid.

b)If the variant has been modified since the If-Modified-Since date,
the response is exactly the same as for a normal GET.

c)If the variant has not been modified since a valid If-Modified-Since
date, the server MUST return a 304 (Not Modified) response.

The purpose of this feature is to allow efficient updates of cached
information with a minimum amount of transaction overhead.

Note that the Range request-header field modifies the meaning of
If-Modified-Since; see section 14.36 for full details.

Note that If-Modified-Since times are interpreted by the server,
whose clock may not be synchronized with the client.

Note that if a client uses an arbitrary date in the If-Modified-Since
header instead of a date taken from the Last-Modified header for the
same request, the client should be aware of the fact that this date
is interpreted in the server's understanding of time. The client
should consider unsynchronized clocks and rounding problems due to
the different encodings of time between the client and server. This
includes the possibility of race conditions if the document has
changed between the time it was first requested and the If-Modified-
Since date of a subsequent request, and the possibility of clock-
skew-related problems if the If-Modified-Since date is derived from
the client's clock without correction to the server's clock.
Corrections for different time bases between client and server are at
best approximate due to network latency.




Fielding, et. al. Standards Track [Page 120]

RFC 2068 HTTP/1.1 January 1997


14.25 If-Match

The If-Match request-header field is used with a method to make it
conditional. A client that has one or more entities previously
obtained from the resource can verify that one of those entities is
current by including a list of their associated entity tags in the
If-Match header field. The purpose of this feature is to allow
efficient updates of cached information with a minimum amount of
transaction overhead. It is also used, on updating requests, to
prevent inadvertent modification of the wrong version of a resource.
As a special case, the value "*" matches any current entity of the
resource.

If-Match = "If-Match" ":" ( "*" | 1#entity-tag )

If any of the entity tags match the entity tag of the entity that
would have been returned in the response to a similar GET request
(without the If-Match header) on that resource, or if "*" is given
and any current entity exists for that resource, then the server MAY
perform the requested method as if the If-Match header field did not
exist.

A server MUST use the strong comparison function (see section 3.11)
to compare the entity tags in If-Match.

If none of the entity tags match, or if "*" is given and no current
entity exists, the server MUST NOT perform the requested method, and
MUST return a 412 (Precondition Failed) response. This behavior is
most useful when the client wants to prevent an updating method, such
as PUT, from modifying a resource that has changed since the client
last retrieved it.

If the request would, without the If-Match header field, result in
anything other than a 2xx status, then the If-Match header MUST be
ignored.

The meaning of "If-Match: *" is that the method SHOULD be performed
if the representation selected by the origin server (or by a cache,
possibly using the Vary mechanism, see section 14.43) exists, and
MUST NOT be performed if the representation does not exist.











Fielding, et. al. Standards Track [Page 121]

RFC 2068 HTTP/1.1 January 1997


A request intended to update a resource (e.g., a PUT) MAY include an
If-Match header field to signal that the request method MUST NOT be
applied if the entity corresponding to the If-Match value (a single
entity tag) is no longer a representation of that resource. This
allows the user to indicate that they do not wish the request to be
successful if the resource has been changed without their knowledge.
Examples:

If-Match: "xyzzy"
If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
If-Match: *

14.26 If-None-Match

The If-None-Match request-header field is used with a method to make
it conditional. A client that has one or more entities previously
obtained from the resource can verify that none of those entities is
current by including a list of their associated entity tags in the
If-None-Match header field. The purpose of this feature is to allow
efficient updates of cached information with a minimum amount of
transaction overhead. It is also used, on updating requests, to
prevent inadvertent modification of a resource which was not known to
exist.

As a special case, the value "*" matches any current entity of the
resource.

If-None-Match = "If-None-Match" ":" ( "*" | 1#entity-tag )

If any of the entity tags match the entity tag of the entity that
would have been returned in the response to a similar GET request
(without the If-None-Match header) on that resource, or if "*" is
given and any current entity exists for that resource, then the
server MUST NOT perform the requested method. Instead, if the request
method was GET or HEAD, the server SHOULD respond with a 304 (Not
Modified) response, including the cache-related entity-header fields
(particularly ETag) of one of the entities that matched. For all
other request methods, the server MUST respond with a status of 412
(Precondition Failed).

See section 13.3.3 for rules on how to determine if two entity tags
match. The weak comparison function can only be used with GET or HEAD
requests.

If none of the entity tags match, or if "*" is given and no current
entity exists, then the server MAY perform the requested method as if
the If-None-Match header field did not exist.




Fielding, et. al. Standards Track [Page 122]

RFC 2068 HTTP/1.1 January 1997


If the request would, without the If-None-Match header field, result
in anything other than a 2xx status, then the If-None-Match header
MUST be ignored.

The meaning of "If-None-Match: *" is that the method MUST NOT be
performed if the representation selected by the origin server (or by
a cache, possibly using the Vary mechanism, see section 14.43)
exists, and SHOULD be performed if the representation does not exist.
This feature may be useful in preventing races between PUT
operations.

Examples:

If-None-Match: "xyzzy"
If-None-Match: W/"xyzzy"
If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"
If-None-Match: *

14.27 If-Range

If a client has a partial copy of an entity in its cache, and wishes
to have an up-to-date copy of the entire entity in its cache, it
could use the Range request-header with a conditional GET (using
either or both of If-Unmodified-Since and If-Match.) However, if the
condition fails because the entity has been modified, the client
would then have to make a second request to obtain the entire current
entity-body.

The If-Range header allows a client to "short-circuit" the second
request. Informally, its meaning is `if the entity is unchanged, send
me the part(s) that I am missing; otherwise, send me the entire new
entity.'

If-Range = "If-Range" ":" ( entity-tag | HTTP-date )

If the client has no entity tag for an entity, but does have a Last-
Modified date, it may use that date in a If-Range header. (The server
can distinguish between a valid HTTP-date and any form of entity-tag
by examining no more than two characters.) The If-Range header should
only be used together with a Range header, and must be ignored if the
request does not include a Range header, or if the server does not
support the sub-range operation.








Fielding, et. al. Standards Track [Page 123]

RFC 2068 HTTP/1.1 January 1997


If the entity tag given in the If-Range header matches the current
entity tag for the entity, then the server should provide the
specified sub-range of the entity using a 206 (Partial content)
response. If the entity tag does not match, then the server should
return the entire entity using a 200 (OK) response.

14.28 If-Unmodified-Since

The If-Unmodified-Since request-header field is used with a method to
make it conditional. If the requested resource has not been modified
since the time specified in this field, the server should perform the
requested operation as if the If-Unmodified-Since header were not
present.

If the requested variant has been modified since the specified time,
the server MUST NOT perform the requested operation, and MUST return
a 412 (Precondition Failed).

If-Unmodified-Since = "If-Unmodified-Since" ":" HTTP-date

An example of the field is:

If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT

If the request normally (i.e., without the If-Unmodified-Since
header) would result in anything other than a 2xx status, the If-
Unmodified-Since header should be ignored.

If the specified date is invalid, the header is ignored.

14.29 Last-Modified

The Last-Modified entity-header field indicates the date and time at
which the origin server believes the variant was last modified.

Last-Modified = "Last-Modified" ":" HTTP-date

An example of its use is

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

The exact meaning of this header field depends on the implementation
of the origin server and the nature of the original resource. For
files, it may be just the file system last-modified time. For
entities with dynamically included parts, it may be the most recent
of the set of last-modify times for its component parts. For database
gateways, it may be the last-update time stamp of the record. For
virtual objects, it may be the last time the internal state changed.



Fielding, et. al. Standards Track [Page 124]

RFC 2068 HTTP/1.1 January 1997


An origin server MUST NOT send a Last-Modified date which is later
than the server's time of message origination. In such cases, where
the resource's last modification would indicate some time in the
future, the server MUST replace that date with the message
origination date.

An origin server should obtain the Last-Modified value of the entity
as close as possible to the time that it generates the Date value of
its response. This allows a recipient to make an accurate assessment
of the entity's modification time, especially if the entity changes
near the time that the response is generated.

HTTP/1.1 servers SHOULD send Last-Modified whenever feasible.

14.30 Location

The Location response-header field is used to redirect the recipient
to a location other than the Request-URI for completion of the
request or identification of a new resource. For 201 (Created)
responses, the Location is that of the new resource which was created
by the request. For 3xx responses, the location SHOULD indicate the
server's preferred URL for automatic redirection to the resource. The
field value consists of a single absolute URL.

Location = "Location" ":" absoluteURI

An example is

Location: http://www.w3.org/pub/WWW/People.html

Note: The Content-Location header field (section 14.15) differs
from Location in that the Content-Location identifies the original
location of the entity enclosed in the request. It is therefore
possible for a response to contain header fields for both Location
and Content-Location. Also see section 13.10 for cache requirements
of some methods.

14.31 Max-Forwards

The Max-Forwards request-header field may be used with the TRACE
method (section 14.31) to limit the number of proxies or gateways
that can forward the request to the next inbound server. This can be
useful when the client is attempting to trace a request chain which
appears to be failing or looping in mid-chain.

Max-Forwards = "Max-Forwards" ":" 1*DIGIT





Fielding, et. al. Standards Track [Page 125]

RFC 2068 HTTP/1.1 January 1997


The Max-Forwards value is a decimal integer indicating the remaining
number of times this request message may be forwarded.

Each proxy or gateway recipient of a TRACE request containing a Max-
Forwards header field SHOULD check and update its value prior to
forwarding the request. If the received value is zero (0), the
recipient SHOULD NOT forward the request; instead, it SHOULD respond
as the final recipient with a 200 (OK) response containing the
received request message as the response entity-body (as described in
section 9.8). If the received Max-Forwards value is greater than
zero, then the forwarded message SHOULD contain an updated Max-
Forwards field with a value decremented by one (1).

The Max-Forwards header field SHOULD be ignored for all other methods
defined by this specification and for any extension methods for which
it is not explicitly referred to as part of that method definition.

14.32 Pragma

The Pragma general-header field is used to include implementation-
specific directives that may apply to any recipient along the
request/response chain. All pragma directives specify optional
behavior from the viewpoint of the protocol; however, some systems
MAY require that behavior be consistent with the directives.

Pragma = "Pragma" ":" 1#pragma-directive

pragma-directive = "no-cache" | extension-pragma
extension-pragma = token [ "=" ( token | quoted-string ) ]

When the no-cache directive is present in a request message, an
application SHOULD forward the request toward the origin server even
if it has a cached copy of what is being requested. This pragma
directive has the same semantics as the no-cache cache-directive (see
section 14.9) and is defined here for backwards compatibility with
HTTP/1.0. Clients SHOULD include both header fields when a no-cache
request is sent to a server not known to be HTTP/1.1 compliant.

Pragma directives MUST be passed through by a proxy or gateway
application, regardless of their significance to that application,
since the directives may be applicable to all recipients along the
request/response chain. It is not possible to specify a pragma for a
specific recipient; however, any pragma directive not relevant to a
recipient SHOULD be ignored by that recipient.







Fielding, et. al. Standards Track [Page 126]

RFC 2068 HTTP/1.1 January 1997


HTTP/1.1 clients SHOULD NOT send the Pragma request-header. HTTP/1.1
caches SHOULD treat "Pragma: no-cache" as if the client had sent
"Cache-Control: no-cache". No new Pragma directives will be defined
in HTTP.

14.33 Proxy-Authenticate

The Proxy-Authenticate response-header field MUST be included as part
of a 407 (Proxy Authentication Required) response. The field value
consists of a challenge that indicates the authentication scheme and
parameters applicable to the proxy for this Request-URI.

Proxy-Authenticate = "Proxy-Authenticate" ":" challenge

The HTTP access authentication process is described in section 11.
Unlike WWW-Authenticate, the Proxy-Authenticate header field applies
only to the current connection and SHOULD NOT be passed on to
downstream clients. However, an intermediate proxy may need to obtain
its own credentials by requesting them from the downstream client,
which in some circumstances will appear as if the proxy is forwarding
the Proxy-Authenticate header field.

14.34 Proxy-Authorization

The Proxy-Authorization request-header field allows the client to
identify itself (or its user) to a proxy which requires
authentication. The Proxy-Authorization field value consists of
credentials containing the authentication information of the user
agent for the proxy and/or realm of the resource being requested.

Proxy-Authorization = "Proxy-Authorization" ":" credentials

The HTTP access authentication process is described in section 11.
Unlike Authorization, the Proxy-Authorization header field applies
only to the next outbound proxy that demanded authentication using
the Proxy-Authenticate field. When multiple proxies are used in a
chain, the Proxy-Authorization header field is consumed by the first
outbound proxy that was expecting to receive credentials. A proxy MAY
relay the credentials from the client request to the next proxy if
that is the mechanism by which the proxies cooperatively authenticate
a given request.

14.35 Public

The Public response-header field lists the set of methods supported
by the server. The purpose of this field is strictly to inform the
recipient of the capabilities of the server regarding unusual
methods. The methods listed may or may not be applicable to the



Fielding, et. al. Standards Track [Page 127]

RFC 2068 HTTP/1.1 January 1997


Request-URI; the Allow header field (section 14.7) MAY be used to
indicate methods allowed for a particular URI.

Public = "Public" ":" 1#method

Example of use:

Public: OPTIONS, MGET, MHEAD, GET, HEAD

This header field applies only to the server directly connected to
the client (i.e., the nearest neighbor in a chain of connections). If
the response passes through a proxy, the proxy MUST either remove the
Public header field or replace it with one applicable to its own
capabilities.

14.36 Range

14.36.1 Byte Ranges

Since all HTTP entities are represented in HTTP messages as sequences
of bytes, the concept of a byte range is meaningful for any HTTP
entity. (However, not all clients and servers need to support byte-
range operations.)

Byte range specifications in HTTP apply to the sequence of bytes in
the entity-body (not necessarily the same as the message-body).

A byte range operation may specify a single range of bytes, or a set
of ranges within a single entity.

ranges-specifier = byte-ranges-specifier

byte-ranges-specifier = bytes-unit "=" byte-range-set

byte-range-set = 1#( byte-range-spec | suffix-byte-range-spec )

byte-range-spec = first-byte-pos "-" [last-byte-pos]

first-byte-pos = 1*DIGIT

last-byte-pos = 1*DIGIT

The first-byte-pos value in a byte-range-spec gives the byte-offset
of the first byte in a range. The last-byte-pos value gives the
byte-offset of the last byte in the range; that is, the byte
positions specified are inclusive. Byte offsets start at zero.





Fielding, et. al. Standards Track [Page 128]

RFC 2068 HTTP/1.1 January 1997


If the last-byte-pos value is present, it must be greater than or
equal to the first-byte-pos in that byte-range-spec, or the byte-
range-spec is invalid. The recipient of an invalid byte-range-spec
must ignore it.

If the last-byte-pos value is absent, or if the value is greater than
or equal to the current length of the entity-body, last-byte-pos is
taken to be equal to one less than the current length of the entity-
body in bytes.

By its choice of last-byte-pos, a client can limit the number of
bytes retrieved without knowing the size of the entity.

suffix-byte-range-spec = "-" suffix-length

suffix-length = 1*DIGIT

A suffix-byte-range-spec is used to specify the suffix of the
entity-body, of a length given by the suffix-length value. (That is,
this form specifies the last N bytes of an entity-body.) If the
entity is shorter than the specified suffix-length, the entire
entity-body is used.

Examples of byte-ranges-specifier values (assuming an entity-body of
length 10000):

o The first 500 bytes (byte offsets 0-499, inclusive):

bytes=0-499

o The second 500 bytes (byte offsets 500-999, inclusive):

bytes=500-999

o The final 500 bytes (byte offsets 9500-9999, inclusive):

bytes=-500

o Or

bytes=9500-

o The first and last bytes only (bytes 0 and 9999):

bytes=0-0,-1






Fielding, et. al. Standards Track [Page 129]

RFC 2068 HTTP/1.1 January 1997


o Several legal but not canonical specifications of the second
500 bytes (byte offsets 500-999, inclusive):

bytes=500-600,601-999

bytes=500-700,601-999

14.36.2 Range Retrieval Requests

HTTP retrieval requests using conditional or unconditional GET
methods may request one or more sub-ranges of the entity, instead of
the entire entity, using the Range request header, which applies to
the entity returned as the result of the request:

Range = "Range" ":" ranges-specifier

A server MAY ignore the Range header. However, HTTP/1.1 origin
servers and intermediate caches SHOULD support byte ranges when
possible, since Range supports efficient recovery from partially
failed transfers, and supports efficient partial retrieval of large
entities.

If the server supports the Range header and the specified range or
ranges are appropriate for the entity:

o The presence of a Range header in an unconditional GET modifies
what is returned if the GET is otherwise successful. In other
words, the response carries a status code of 206 (Partial
Content) instead of 200 (OK).

o The presence of a Range header in a conditional GET (a request
using one or both of If-Modified-Since and If-None-Match, or
one or both of If-Unmodified-Since and If-Match) modifies what
is returned if the GET is otherwise successful and the condition
is true. It does not affect the 304 (Not Modified) response
returned if the conditional is false.

In some cases, it may be more appropriate to use the If-Range header
(see section 14.27) in addition to the Range header.

If a proxy that supports ranges receives a Range request, forwards
the request to an inbound server, and receives an entire entity in
reply, it SHOULD only return the requested range to its client. It
SHOULD store the entire received response in its cache, if that is
consistent with its cache allocation policies.






Fielding, et. al. Standards Track [Page 130]

RFC 2068 HTTP/1.1 January 1997


14.37 Referer

The Referer[sic] request-header field allows the client to specify,
for the server's benefit, the address (URI) of the resource from
which the Request-URI was obtained (the "referrer", although the
header field is misspelled.) The Referer request-header allows a
server to generate lists of back-links to resources for interest,
logging, optimized caching, etc. It also allows obsolete or mistyped
links t

Страницы

Подякувати Помилка?

Дочати пiзнiше / подiлитися