1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725
|
<pre>Network Working Group J. Mogul
Request for Comments: 3230 Compaq WRL
Category: Standards Track A. Van Hoff
Marimba
January 2002
<span class="h1">Instance Digests in HTTP</span>
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2002). All Rights Reserved.
Abstract
HTTP/1.1 defines a Content-MD5 header that allows a server to include
a digest of the response body. However, this is specifically defined
to cover the body of the actual message, not the contents of the full
file (which might be quite different, if the response is a Content-
Range, or uses a delta encoding). Also, the Content-MD5 is limited
to one specific digest algorithm; other algorithms, such as SHA-1
(Secure Hash Standard), may be more appropriate in some
circumstances. Finally, HTTP/1.1 provides no explicit mechanism by
which a client may request a digest. This document proposes HTTP
extensions that solve these problems.
Table of Contents
<a href="#section-1">1</a> Introduction.................................................... <a href="#page-2">2</a>
<a href="#section-1.1">1.1</a> Other limitations of HTTP/1.1............................ <a href="#page-3">3</a>
<a href="#section-2">2</a> Goals........................................................... <a href="#page-4">4</a>
<a href="#section-3">3</a> Terminology..................................................... <a href="#page-5">5</a>
<a href="#section-4">4</a> Specification................................................... <a href="#page-6">6</a>
<a href="#section-4.1">4.1</a> Protocol parameter specifications........................ <a href="#page-6">6</a>
<a href="#section-4.1.1">4.1.1</a> Digest algorithms................................. <a href="#page-6">6</a>
<a href="#section-4.2">4.2</a> Instance digests......................................... <a href="#page-7">7</a>
<a href="#section-4.3">4.3</a> Header specifications.................................... <a href="#page-8">8</a>
<a href="#section-4.3.1">4.3.1</a> Want-Digest....................................... <a href="#page-8">8</a>
<a href="#section-4.3.2">4.3.2</a> Digest............................................ <a href="#page-9">9</a>
<a href="#section-5">5</a> Negotiation of Content-MD5...................................... <a href="#page-9">9</a>
<span class="grey">Mogul, et. al. Standards Track [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
<a href="#section-6">6</a> IANA Considerations............................................. <a href="#page-10">10</a>
<a href="#section-7">7</a> Security Considerations......................................... <a href="#page-10">10</a>
<a href="#section-8">8</a> Acknowledgements................................................ <a href="#page-10">10</a>
<a href="#section-9">9</a> References...................................................... <a href="#page-10">10</a>
<a href="#section-10">10</a> Authors' Addresses............................................. <a href="#page-12">12</a>
<a href="#section-11">11</a> Full Copyright Statement....................................... <a href="#page-13">13</a>
<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a> Introduction</span>
Although HTTP is typically layered over a reliable transport
protocol, such as TCP, this does not guarantee reliable transport of
information from sender to receiver. Various problems, including
undetected transmission errors, programming errors, corruption of
stored data, and malicious intervention can cause errors in the
transmitted information.
A common approach to the problem of data integrity in a network
protocol or distributed system, such as HTTP, is the use of digests,
checksums, or hash values. The sender computes a digest and sends it
with the data; the recipient computes a digest of the received data,
and then verifies the integrity of this data by comparing the
digests.
Checksums are used at virtually all layers of the IP stack. However,
different digest algorithms might be used at each layer, for reasons
of computational cost, because the size and nature of the data being
protected varies, and because the possible threats to data integrity
vary. For example, Ethernet uses a Cyclic Redundancy Check (CRC).
The IPv4 protocol uses a ones-complement checksum over the IP header
(but not the rest of the packet). TCP uses a ones-complement
checksum over the TCP header and data, and includes a "pseudo-header"
to detect certain kinds of programming errors.
HTTP/1.1 [<a href="#ref-4" title=""Hypertext Transfer Protocol -- HTTP/1.1."">4</a>] includes a mechanism for ensuring message integrity, the
Content-MD5 header. This header is actually defined for MIME-
conformant messages in a standalone specification [<a href="#ref-10" title=""The Content-MD5 Header Field"">10</a>]. According to
the HTTP/1.1 specification,
The Content-MD5 entity-header field [...] 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.
HTTP/1.1 borrowed Content-MD5 from the MIME world based on an analogy
between MIME messages (e.g., electronic mail messages) and HTTP
messages (requests to or responses from an HTTP server).
<span class="grey">Mogul, et. al. Standards Track [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
As discussed in more detail in <a href="#section-3">section 3</a>, this analogy between MIME
messages and HTTP messages has resulted in some confusion. In
particular, while a MIME message is self-contained, an HTTP message
might not contain the entire representation of the current state of a
resource. (More precisely, an HTTP response might not contain an
entire "instance"; see <a href="#section-3">section 3</a> for a definition of this term.)
There are at least two situations where this distinction is an issue:
1. When an HTTP server sends a 206 (Partial Content) response, as
defined in HTTP/1.1. The client may form its view of an
instance (e.g., an HTML document) by combining a cache entry
with the partial content in the message.
2. When an HTTP server uses a "delta encoding", as proposed in a
separate document [<a href="#ref-9" title=""Delta encoding in HTTP"">9</a>]. A delta encoding represents the changes
between the current instance of a resource and a previous
instance, and is an efficient way of reducing the bandwidth
required for cache updates. The client forms its view of an
instance by applying the delta in the message to one of its
cache entries.
We include these two kinds of transformations in a potentially
broader category we call "instance manipulations."
In each of these cases, the server might use a Content-MD5 header to
protect the integrity of the response message. However, because the
MIC in a Content-MD5 header field applies only to the entity in that
message, and not to the entire instance being reassembled, it cannot
protect against errors due to data corruption (e.g., of cache
entries), programming errors (e.g., improper application of a partial
content or delta), certain malicious attacks [<a href="#ref-9" title=""Delta encoding in HTTP"">9</a>], or corruption of
certain HTTP headers in transit.
Thus, the Content-MD5 header, while useful and sufficient in many
cases, is not sufficient for verifying instance integrity in all uses
of HTTP.
The Digest Authentication mechanism [<a href="#ref-5" title=""HTTP Authentication: Basic and Digest Access Authentication"">5</a>] provides (in addition to its
other goals) a message-digest function similar to Content-MD5, except
that it includes certain header fields. Like Content-MD5, it covers
a specific message, not an entire instance.
<span class="h3"><a class="selflink" id="section-1.1" href="#section-1.1">1.1</a> Other limitations of HTTP/1.1</span>
Checksums are not free. Computing a digest takes CPU resources, and
might add latency to the generation of a message. (Some of these
costs can be avoided by careful caching at the sender's end, but in
<span class="grey">Mogul, et. al. Standards Track [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
many cases such a cache would not have a useful hit ratio.)
Transmitting a digest consumes HTTP header space (and therefore
increases latency and network bandwidth requirements.) If the
message recipient does not intend to use the digest, why should the
message sender waste resources computing and sending it?
The Content-MD5 header, of course, implies the use of the MD5
algorithm [<a href="#ref-15" title=""The MD5 Message-Digest Algorithm"">15</a>]. Other algorithms, however, might be more appropriate
for some purposes. These include the SHA-1 algorithm [<a href="#ref-12" title="April">12</a>] and
various "fingerprinting" algorithms [<a href="#ref-7" title="1996">7</a>]. HTTP currently provides no
standardized support for the use of these algorithms.
HTTP/1.1 apparently assumes that the choice to generate a digest is
up to the sender, and provides no mechanism for the recipient to
indicate whether a checksum would be useful, or what checksum
algorithms it would understand.
<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a> Goals</span>
The goals of this proposal are:
1. Digest coverage for entire instances communicated via HTTP.
2. Support for multiple digest algorithms.
3. Negotiation of the use of digests.
The goals do not include:
- header integrity
The digest mechanisms described here cover only the bodies of
instances, and do not protect the integrity of associated
"entity headers" or other message headers.
- authentication
The digest mechanisms described here are not meant to support
authentication of the source of a digest or of a message or
instance. These mechanisms, therefore, are not sufficient
defense against many kinds of malicious attacks.
- privacy
Digest mechanisms do not provide message privacy.
- authorization
The digest mechanisms described here are not meant to support
authorization or other kinds of access controls.
<span class="grey">Mogul, et. al. Standards Track [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
The Digest Access Authentication mechanism [<a href="#ref-5" title=""HTTP Authentication: Basic and Digest Access Authentication"">5</a>] can provide some
integrity for certain HTTP headers, and does provide authentication.
<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a> Terminology</span>
HTTP/1.1 [<a href="#ref-4" title=""Hypertext Transfer Protocol -- HTTP/1.1."">4</a>] defines the following terms:
resource A network data object or service that can be
identified by a URI, as defined in <a href="#section-3.2">section 3.2</a>.
Resources may be available in multiple
representations (e.g. multiple languages, data
formats, size, resolutions) or vary in other ways.
entity The information transferred as the payload of a
request or response. An entity consists of
metainformation in the form of entity-header fields
and content in the form of an entity-body, as
described in <a href="#section-7">section 7</a>.
variant A resource may have one, or more than one,
representation(s) associated with it at any given
instant. Each of these representations is termed a
`variant.' Use of the term `variant' does not
necessarily imply that the resource is subject to
content negotiation.
The dictionary definition for "entity" is "something that has
separate and distinct existence and objective or conceptual reality"
[<a href="#ref-8" title="MA">8</a>]. Unfortunately, the definition for "entity" in HTTP/1.1 is
similar to that used in MIME [<a href="#ref-6" title=""Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies"">6</a>], based on an entirely false analogy
between MIME and HTTP.
In MIME, electronic mail messages do have distinct and separate
existences. MIME defines "entity" as something that "refers
specifically to the MIME-defined header fields and contents of either
a message or one of the parts in the body of a multipart entity."
In HTTP, however, a response message to a GET does not have a
distinct and separate existence. Rather, it is describing the
current state of a resource (or a variant, subject to a set of
constraints). The HTTP/1.1 specification provides no term to
describe "the value that would be returned in response to a GET
request at the current time for the selected variant of the specified
resource." This leads to awkward wordings in the HTTP/1.1
specification in places where this concept is necessary.
<span class="grey">Mogul, et. al. Standards Track [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
It is too late to fix the terminological failure in the HTTP/1.1
specification, so we instead define a new term, for use in this
document:
instance The entity that would be returned in a status-200
response to a GET request, at the current time, for
the selected variant of the specified resource,
with the application of zero or more content-
codings, but without the application of any
instance manipulations or transfer-codings.
It is convenient to think of an entity tag, in HTTP/1.1, as being
associated with an instance, rather than an entity. That is, for a
given resource, two different response messages might include the
same entity tag, but two different instances of the resource should
never be associated with the same (strong) entity tag.
We also define this term:
instance manipulation
An operation on one or more instances which may
result in an instance being conveyed from server to
client in parts, or in more than one response
message. For example, a range selection or a delta
encoding. Instance manipulations are end-to-end,
and often involve the use of a cache at the client.
<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a> Specification</span>
In this specification, the key words "MUST", "MUST NOT", "SHOULD",
"SHOULD NOT", and "MAY" are to be interpreted as described in <a href="./rfc2119">RFC</a>
<a href="./rfc2119">2119</a> [<a href="#ref-2" title=""Key words for use in RFCs to Indicate Requirement Levels"">2</a>].
<span class="h3"><a class="selflink" id="section-4.1" href="#section-4.1">4.1</a> Protocol parameter specifications</span>
<span class="h4"><a class="selflink" id="section-4.1.1" href="#section-4.1.1">4.1.1</a> Digest algorithms</span>
Digest algorithm values are used to indicate a specific digest
computation. For some algorithms, one or more parameters may be
supplied.
digest-algorithm = token
The BNF for "parameter" is as is used in <a href="./rfc2616">RFC 2616</a> [<a href="#ref-4" title=""Hypertext Transfer Protocol -- HTTP/1.1."">4</a>]. All digest-
algorithm values are case-insensitive.
<span class="grey">Mogul, et. al. Standards Track [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
The Internet Assigned Numbers Authority (IANA) acts as a registry for
digest-algorithm values. Initially, the registry contains the
following tokens:
MD5 The MD5 algorithm, as specified in <a href="./rfc1321">RFC 1321</a> [<a href="#ref-15" title=""The MD5 Message-Digest Algorithm"">15</a>].
The output of this algorithm is encoded using the
base64 encoding [<a href="#ref-1" title=""MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies"">1</a>].
SHA The SHA-1 algorithm [<a href="#ref-12" title="April">12</a>]. The output of this
algorithm is encoded using the base64 encoding [<a href="#ref-1" title=""MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies"">1</a>].
UNIXsum The algorithm computed by the UNIX "sum" command,
as defined by the Single UNIX Specification,
Version 2 [<a href="#ref-13" title=" February">13</a>]. The output of this algorithm is an
ASCII decimal-digit string representing the 16-bit
checksum, which is the first word of the output of
the UNIX "sum" command.
UNIXcksum The algorithm computed by the UNIX "cksum" command,
as defined by the Single UNIX Specification,
Version 2 [<a href="#ref-13" title=" February">13</a>]. The output of this algorithm is an
ASCII digit string representing the 32-bit CRC,
which is the first word of the output of the UNIX
"cksum" command.
If other digest-algorithm values are defined, the associated encoding
MUST either be represented as a quoted string, or MUST NOT include
";" or "," in the character sets used for the encoding.
<span class="h3"><a class="selflink" id="section-4.2" href="#section-4.2">4.2</a> Instance digests</span>
An instance digest is the representation of the output of a digest
algorithm, together with an indication of the algorithm used (and any
parameters).
instance-digest = digest-algorithm "="
<encoded digest output>
The digest is computed on the entire instance associated with the
message. The instance is a snapshot of the resource prior to the
application of of any instance manipulation or transfer-coding (see
<a href="#section-3">section 3</a>). The byte order used to compute the digest is the
transmission byte order defined for the content-type of the instance.
<span class="grey">Mogul, et. al. Standards Track [Page 7]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-8" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
Note: the digest is computed before the application of any
instance manipulation. If a range or a delta-coding [<a href="#ref-9" title=""Delta encoding in HTTP"">9</a>] is used,
the computation of the digest after the computation of the range
or delta would not provide a digest useful for checking the
integrity of the reassembled instance.
The encoded digest output uses the encoding format defined for the
specific digest-algorithm. For example, if the digest-algorithm is
"MD5", the encoding is base64; if the digest-algorithm is "UNIXsum",
the encoding is an ASCII string of decimal digits.
Examples:
MD5=HUXZLQLMuI/KZ5KDcJPcOA==
sha=thvDyvhfIqlvFe+A9MYgxAfm1q5=
UNIXsum=30637
<span class="h3"><a class="selflink" id="section-4.3" href="#section-4.3">4.3</a> Header specifications</span>
The following headers are defined.
<span class="h4"><a class="selflink" id="section-4.3.1" href="#section-4.3.1">4.3.1</a> Want-Digest</span>
The Want-Digest message header field indicates the sender's desire to
receive an instance digest on messages associated with the Request-
URI.
Want-Digest = "Want-Digest" ":"
#(digest-algorithm [ ";" "q" "=" qvalue])
If a digest-algorithm is not accompanied by a qvalue, it is treated
as if its associated qvalue were 1.0.
The sender is willing to accept a digest-algorithm if and only if it
is listed in a Want-Digest header field of a message, and its qvalue
is non-zero.
If multiple acceptable digest-algorithm values are given, the
sender's preferred digest-algorithm is the one (or ones) with the
highest qvalue.
Examples:
Want-Digest: md5
Want-Digest: MD5;q=0.3, sha;q=1
<span class="grey">Mogul, et. al. Standards Track [Page 8]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-9" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
<span class="h4"><a class="selflink" id="section-4.3.2" href="#section-4.3.2">4.3.2</a> Digest</span>
The Digest message header field provides a message digest of the
instance described by the message.
Digest = "Digest" ":" #(instance-digest)
The instance described by a message might be fully contained in the
message-body, partially-contained in the message-body, or not at all
contained in the message-body. The instance is specified by the
Request-URI and any cache-validator contained in the message.
A Digest header field MAY contain multiple instance-digest values.
This could be useful for responses expected to reside in caches
shared by users with different browsers, for example.
A recipient MAY ignore any or all of the instance-digests in a Digest
header field.
A sender MAY send an instance-digest using a digest-algorithm without
knowing whether the recipient supports the digest-algorithm, or even
knowing that the recipient will ignore it.
Examples:
Digest: md5=HUXZLQLMuI/KZ5KDcJPcOA==
Digest: SHA=thvDyvhfIqlvFe+A9MYgxAfm1q5=,unixsum=30637
<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a> Negotiation of Content-MD5</span>
HTTP/1.1 provides a Content-MD5 header field, but does not provide
any mechanism for requesting its use (or non-use). The Want-Digest
header field defined in this document provides the basis for such a
mechanism.
First, we add to the set of digest-algorithm values (in <a href="#section-4.1.1">section</a>
<a href="#section-4.1.1">4.1.1</a>) the token "contentMD5", with the provision that this digest-
algorithm MUST NOT be used in a Digest header field.
The presence of the "contentMD5" digest-algorithm with a non-zero
qvalue in a Want-Digest header field indicates that the sender wishes
to receive a Content-MD5 header on messages associated with the
Request-URI.
The presence of the "contentMD5" digest-algorithm with a zero qvalue
in a Want-Digest header field indicates that the sender will ignore
Content-MD5 headers on messages associated with the Request-URI.
<span class="grey">Mogul, et. al. Standards Track [Page 9]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-10" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a> IANA Considerations</span>
The Internet Assigned Numbers Authority (IANA) administers the name
space for digest-algorithm values. Values and their meaning must be
documented in an RFC or other peer-reviewed, permanent, and readily
available reference, in sufficient detail so that interoperability
between independent implementations is possible. Subject to these
constraints, name assignments are First Come, First Served (see <a href="./rfc2434">RFC</a>
<a href="./rfc2434">2434</a> [<a href="#ref-11" title="">11</a>]).
<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a> Security Considerations</span>
This document specifies a data integrity mechanism that protects HTTP
instance data, but not HTTP entity headers, from certain kinds of
accidental corruption. It is also useful in detecting at least one
spoofing attack [<a href="#ref-9" title=""Delta encoding in HTTP"">9</a>]. However, it is not intended as general
protection against malicious tampering with HTTP messages.
The HTTP Digest Access Authentication mechanism [<a href="#ref-5" title=""HTTP Authentication: Basic and Digest Access Authentication"">5</a>] provides some
protection against malicious tampering.
<span class="h2"><a class="selflink" id="section-8" href="#section-8">8</a> Acknowledgements</span>
It is not clear who first realized that the Content-MD5 header field
is not sufficient to provide data integrity when ranges or deltas are
used.
Laurent Demailly may have been the first to suggest an algorithm-
independent checksum header for HTTP [<a href="#ref-3">3</a>]. Dave Raggett suggested the
use of the term "digest" instead of "checksum" [<a href="#ref-14">14</a>].
<span class="h2"><a class="selflink" id="section-9" href="#section-9">9</a> References</span>
[<a id="ref-1">1</a>] Freed, N. and N. Borenstein, N., "MIME (Multipurpose Internet
Mail Extensions) Part One: Mechanisms for Specifying and
Describing the Format of Internet Message Bodies", <a href="./rfc2049">RFC 2049</a>,
November 1996.
[<a id="ref-2">2</a>] Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", <a href="https://www.rfc-editor.org/bcp/bcp14">BCP 14</a>, <a href="./rfc2119">RFC 2119</a>, March 1997.
[<a id="ref-3">3</a>] Laurent Demailly. Re: Revised Charter.
<a href="http://www.ics.uci.edu/pub/ietf/http/hypermail/1995q4/0165.html">http://www.ics.uci.edu/pub/ietf/http/hypermail/1995q4/0165.html</a>.
[<a id="ref-4">4</a>] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L.,
Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol --
HTTP/1.1.", <a href="./rfc2616">RFC 2616</a>, June 1999.
<span class="grey">Mogul, et. al. Standards Track [Page 10]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-11" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
[<a id="ref-5">5</a>] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S.,
Leach, P., Luotonen, A. and L. Stewart, "HTTP Authentication:
Basic and Digest Access Authentication", <a href="./rfc2617">RFC 2617</a>, June 1999.
[<a id="ref-6">6</a>] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part One: Format of Internet Message Bodies",
<a href="./rfc2045">RFC 2045</a>, November 1996.
[<a id="ref-7">7</a>] Nevin Heintze. Scalable Document Fingerprinting. Proc. Second
USENIX Workshop on Electronic Commerce, USENIX, Oakland, CA,
November, 1996, pp. 191-200.
<a href="http://www.cs.cmu.edu/afs/cs/user/nch/www/koala/main.html">http://www.cs.cmu.edu/afs/cs/user/nch/www/koala/main.html</a>.
[<a id="ref-8">8</a>] Merriam-Webster. Webster's Seventh New Collegiate Dictionary.
G. & C. Merriam Co., Springfield, MA, 1963.
[<a id="ref-9">9</a>] Mogul, J., Krishnamurthy, B., Douglis, F., Feldmann, A., Goland,
Y. and A. van Hoff, "Delta encoding in HTTP", <a href="./rfc3229">RFC 3229</a>, December
2001.
[<a id="ref-10">10</a>] Myers, J. and M. Rose, "The Content-MD5 Header Field", <a href="./rfc1864">RFC 1864</a>,
October 1995.
[<a id="ref-11">11</a>] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA
Considerations Section in RFCs", <a href="https://www.rfc-editor.org/bcp/bcp26">BCP 26</a>, <a href="./rfc2434">RFC 2434</a>, October 1998.
[<a id="ref-12">12</a>] National Institute of Standards and Technology. Secure Hash
Standard. FEDERAL INFORMATION PROCESSING STANDARDS PUBLICATION
180-1, U.S. Department of Commerce, April, 1995.
<a href="http://csrc.nist.gov/fips/fip180-1.txt">http://csrc.nist.gov/fips/fip180-1.txt</a>.
[<a id="ref-13">13</a>] The Open Group. The Single UNIX Specification, Version 2 - 6
Vol Set for UNIX 98. Document number T912, The Open Group,
February, 1997.
[<a id="ref-14">14</a>] Dave Raggett. Re: Revised Charter.
<a href="http://www.ics.uci.edu/pub/ietf/http/hypermail/1995q4/0182.html">http://www.ics.uci.edu/pub/ietf/http/hypermail/1995q4/0182.html</a>.
[<a id="ref-15">15</a>] Rivest, R., "The MD5 Message-Digest Algorithm", <a href="./rfc1321">RFC 1321</a>, April
1992.
<span class="grey">Mogul, et. al. Standards Track [Page 11]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-12" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
<span class="h2"><a class="selflink" id="section-10" href="#section-10">10</a> Authors' Addresses</span>
Jeffrey C. Mogul
Western Research Laboratory
Compaq Computer Corporation
250 University Avenue
Palo Alto, California, 94305, U.S.A.
EMail: JeffMogul@acm.org
Phone: 1 650 617 3304 (email preferred)
Arthur van Hoff
Marimba, Inc.
440 Clyde Avenue
Mountain View, CA 94043
EMail: avh@marimba.com
Phone: 1 (650) 930 5283
<span class="grey">Mogul, et. al. Standards Track [Page 12]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-13" ></span>
<span class="grey"><a href="./rfc3230">RFC 3230</a> Instance Digests in HTTP January 2002</span>
<span class="h2"><a class="selflink" id="section-11" href="#section-11">11</a> Full Copyright Statement</span>
Copyright (C) The Internet Society (2002). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgement
Funding for the RFC Editor function is currently provided by the
Internet Society.
Mogul, et. al. Standards Track [Page 13]
</pre>
|