HTTP - Wikipedia
HTTP - Wikipedia
required.[10][11] HTTP
RFC 83
HTTP/3, the s://da
successor to r.ietf.
Technical overview
Tim Berners-Lee
HTTP/0.9
In 1991, the first documented official
version of HTTP was written as a plain
document, less than 700 words long,
and this version was named HTTP/0.9,
which supported only GET method,
allowing clients to only retrieve HTML
documents from the server, but not
supporting any other file formats or
information upload.[2]
HTTP/1.0-draft
Since 1992, a new document was
written to specify the evolution of the
basic protocol towards its next full
version. It supported both the simple
request method of the 0.9 version and
the full GET request that included the
client HTTP version. This was the first of
the many unofficial HTTP/1.0 drafts that
preceded the final work on HTTP/1.0.[3]
W3C HTTP Working Group
After having decided that new features
of HTTP protocol were required and that
they had to be fully documented as
official RFCs, in early 1995 the HTTP
Working Group (HTTP WG, led by Dave
Raggett) was constituted with the aim to
standardize and expand the protocol
with extended operations, extended
negotiation, richer meta-information,
tied with a security protocol which
became more efficient by adding
additional methods and header
fields.[28][29]
The HTTP WG planned to revise and
publish new versions of the protocol as
HTTP/1.0 and HTTP/1.1 within 1995,
but, because of the many revisions, that
timeline lasted much more than one
year.[30]
The HTTP WG planned also to specify a
far future version of HTTP called HTTP-
NG (HTTP Next Generation) that would
have solved all remaining problems, of
previous versions, related to
performances, low latency responses,
etc. but this work started only a few
years later and it was never completed.
HTTP/1.0
In May 1996, RFC 1945 (https://datatrac
ker.ietf.org/doc/html/rfc1945) was
published as a final HTTP/1.0 revision
of what had been used in previous 4
years as a pre-standard HTTP/1.0-draft
which was already used by many web
browsers and web servers.
In early 1996 developers started to even
include unofficial extensions of the
HTTP/1.0 protocol (i.e. keep-alive
connections, etc.) into their products by
using drafts of the upcoming HTTP/1.1
specifications.[31]
HTTP/1.1
Since early 1996, major web browsers
and web server developers also started
to implement new features specified by
pre-standard HTTP/1.1 drafts
specifications. End-user adoption of the
new versions of browsers and servers
was rapid. In March 1996, one web
hosting company reported that over 40%
of browsers in use on the Internet used
the new HTTP/1.1 header "Host" to
enable virtual hosting. That same web
hosting company reported that by June
1996, 65% of all browsers accessing
their servers were pre-standard
HTTP/1.1 compliant.[32]
In January 1997, RFC 2068 (https://data
tracker.ietf.org/doc/html/rfc2068) was
officially released as HTTP/1.1
specifications.
In June 1999, RFC 2616 (https://datatra
cker.ietf.org/doc/html/rfc2616) was
released to include all improvements
and updates based on previous
(obsolete) HTTP/1.1 specifications.
W3C HTTP-NG Working Group
Resuming the old 1995 plan of previous
HTTP Working Group, in 1997 an HTTP-
NG Working Group was formed to
develop a new HTTP protocol named
HTTP-NG (HTTP New Generation). A
few proposals / drafts were produced
for the new protocol to use multiplexing
of HTTP transactions inside a single
TCP/IP connection, but in 1999, the
group stopped its activity passing the
technical problems to IETF.[33]
IETF HTTP Working Group restarted
In 2007, the IETF HTTP Working Group
(https://httpwg.org/) (HTTP WG bis or
HTTPbis) was restarted firstly to revise
and clarify previous HTTP/1.1
specifications and secondly to write and
refine future HTTP/2 specifications
(named httpbis).[34][35]
SPDY: an unofficial HTTP protocol
developed by Google
In 2009, Google, a private company,
announced that it had developed and
tested a new HTTP binary protocol
named SPDY. The implicit aim was to
greatly speed up web traffic (specially
between future web browsers and its
servers).
SPDY was indeed much faster than
HTTP/1.1 in many tests and so it was
quickly adopted by Chromium and then
by other major web browsers.[36]
Some of the ideas about multiplexing
HTTP streams over a single TCP/IP
connection were taken from various
sources, including the work of W3C
HTTP-NG Working Group.
HTTP/2
In January–March 2012, HTTP Working
Group (HTTPbis) announced the need to
start to focus on a new HTTP/2 protocol
(while finishing the revision of HTTP/1.1
specifications), maybe taking in
consideration ideas and work done for
SPDY.[37][38]
After a few months about what to do to
develop a new version of HTTP, it was
decided to derive it from SPDY.[39]
In May 2015, HTTP/2 was published as
RFC 7540 (https://datatracker.ietf.org/d
oc/html/rfc7540) and quickly adopted
by all web browsers already supporting
SPDY and more slowly by web servers.
2014 updates to HTTP/1.1
In June 2014, the HTTP Working Group
released an updated six-part HTTP/1.1
specification obsoleting RFC 2616 (http
s://datatracker.ietf.org/doc/html/rfc261
6) :
RFC 7230 (https://datatracker.ietf.org/
doc/html/rfc7230) , HTTP/1.1:
Message Syntax and Routing
RFC 7231 (https://datatracker.ietf.org/
doc/html/rfc7231) , HTTP/1.1:
Semantics and Content
RFC 7232 (https://datatracker.ietf.org/
doc/html/rfc7232) , HTTP/1.1:
Conditional Requests
RFC 7233 (https://datatracker.ietf.org/
doc/html/rfc7233) , HTTP/1.1: Range
Requests
RFC 7234 (https://datatracker.ietf.org/
doc/html/rfc7234) , HTTP/1.1:
Caching
RFC 7235 (https://datatracker.ietf.org/
doc/html/rfc7235) , HTTP/1.1:
Authentication
HTTP/0.9 Deprecation
In RFC 7230 (https://datatracker.ietf.or
g/doc/html/rfc7230) Appendix-A,
HTTP/0.9 was deprecated for servers
supporting HTTP/1.1 version (and
higher):[40]
HTTP/3
In 2020, the first drafts HTTP/3 were
published and major web browsers and
web servers started to adopt it.
On 6 June 2022, IETF standardized
HTTP/3 as RFC 9114 (https://datatracke
r.ietf.org/doc/html/rfc9114) .[42]
Updates and refactoring in 2022
In June 2022, a batch of RFCs was
published, deprecating many of the
previous documents and introducing a
few minor changes and a refactoring of
HTTP semantics description into a
separate document.
RFC 9110 (https://datatracker.ietf.org/
doc/html/rfc9110) , HTTP Semantics
RFC 9111 (https://datatracker.ietf.org/
doc/html/rfc9111) , HTTP Caching
RFC 9112 (https://datatracker.ietf.org/
doc/html/rfc9112) , HTTP/1.1
RFC 9113 (https://datatracker.ietf.org/
doc/html/rfc9113) , HTTP/2
RFC 9114 (https://datatracker.ietf.org/
doc/html/rfc9114) , HTTP/3 (see also
the section above)
RFC 9204 (https://datatracker.ietf.org/
doc/html/rfc9204) , QPACK: Field
Compression for HTTP/3
RFC 9218 (https://datatracker.ietf.org/
doc/html/rfc9218) , Extensible
Prioritization Scheme for HTTP
HTTP data exchange
HTTP/0.9
a requested resource was always sent
entirely.
HTTP/1.0
HTTP/1.0 added headers to manage
resources cached by client in order to
allow conditional GET requests; in
practice a server has to return the entire
content of the requested resource only if
its last modified time is not known by
client or if it changed since last full
response to GET request. One of these
headers, "Content-Encoding", was added
to specify whether the returned content
of a resource was or was not
compressed.
If the total length of the content of a
resource was not known in advance (i.e.
because it was dynamically generated,
etc.) then the header "Content-
Length: number" was not present
in HTTP headers and the client assumed
that when server closed the connection,
the content had been entirely sent. This
mechanism could not distinguish
between a resource transfer
successfully completed and an
interrupted one (because of a server /
network error or something else).
HTTP/1.1
HTTP/1.1 introduced:
new headers to better manage the
conditional retrieval of cached
resources.
chunked transfer encoding to allow
content to be streamed in chunks in
order to reliably send it even when the
server does not know in advance its
length (i.e. because it is dynamically
generated, etc.).
byte range serving, where a client can
request only one or more portions
(ranges of bytes) of a resource (i.e.
the first part, a part in the middle or in
the end of the entire content, etc.) and
the server usually sends only the
requested part(s). This is useful to
resume an interrupted download
(when a file is really big), when only a
part of a content has to be shown or
dynamically added to the already
visible part by a browser (i.e. only the
first or the following n comments of a
web page) in order to spare time,
bandwidth and system resources, etc.
HTTP/2, HTTP/3
Both HTTP/2 and HTTP/3 have kept the
above mentioned features of HTTP/1.1.
HTTP authentication
Authentication realms
Request syntax
Host: www.example.com
Accept-Language: en
an empty line, consisting of a carriage
return and a line feed;
an optional message body.
GET
The GET method requests that the
target resource transfer a representation
of its state. GET requests should only
retrieve data and should have no other
effect. (This is also true of some other
HTTP methods.)[1] For retrieving
resources without making changes, GET
is preferred over POST, as they can be
addressed through a URL. This enables
bookmarking and sharing and makes
GET responses eligible for caching,
which can save bandwidth. The W3C
has published guidance principles on
this distinction, saying, "Web application
design should be informed by the above
principles, but also by the relevant
limitations."[53] See safe methods below.
HEAD
The HEAD method requests that the
target resource transfer a representation
of its state, as for a GET request, but
without the representation data
enclosed in the response body. This is
useful for retrieving the representation
metadata in the response header,
without having to transfer the entire
representation. Uses include checking
whether a page is available through the
status code and quickly finding the size
of a file ( Content-Length ).
POST
The POST method requests that the
target resource process the
representation enclosed in the request
according to the semantics of the target
resource. For example, it is used for
posting a message to an Internet forum,
subscribing to a mailing list, or
completing an online shopping
transaction.[54]
PUT
The PUT method requests that the
target resource create or update its
state with the state defined by the
representation enclosed in the request.
A distinction from POST is that the
client specifies the target location on
the server.[55]
DELETE
The DELETE method requests that the
target resource delete its state.
CONNECT
The CONNECT method requests that the
intermediary establish a TCP/IP tunnel
to the origin server identified by the
request target. It is often used to secure
connections through one or more HTTP
proxies with TLS.[56][57] See HTTP
CONNECT method.
OPTIONS
The OPTIONS method requests that the
target resource transfer the HTTP
methods that it supports. This can be
used to check the functionality of a web
server by requesting '*' instead of a
specific resource.
TRACE
The TRACE method requests that the
target resource transfer the received
request in the response body. That way
a client can see what (if any) changes or
additions have been made by
intermediaries.
PATCH
The PATCH method requests that the
target resource modify its state
according to the partial update defined
in the representation enclosed in the
request. This can save bandwidth by
updating a part of a file or document
without having to transfer it entirely.[58]
Safe methods
Idempotent methods
Cacheable methods
HTTP/1.1 200 OK
Content-Type: text/html
1XX (informational)
The request was received, continuing
process.
2XX (successful)
The request was successfully received,
understood, and accepted.
3XX (redirection)
Further action needs to be taken in order
to complete the request.
4XX (client error)
The request contains bad syntax or
cannot be fulfilled.
5XX (server error)
The server failed to fulfill an apparently
valid request.
Client request
GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept:
text/html,application/xhtml
+xml,application/xml;q=0.9,
image/avif,image/webp,*/*;q
=0.8
Accept-Language: en-
GB,en;q=0.5
Accept-Encoding: gzip,
deflate, br
Connection: keep-alive
Server response
HTTP/1.1 200 OK
Date: Mon, 23 May 2005
22:38:34 GMT
Content-Type: text/html;
charset=UTF-8
Content-Length: 155
Last-Modified: Wed, 08 Jan
2003 23:11:55 GMT
Server: Apache/1.3.3.7
(Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close
<html>
<head>
<title>An Example
Page</title>
</head>
<body>
<p>Hello World, this is
a very simple HTML
document.</p>
</body>
</html>
See also
Notes
References
External links
Retrieved from
"https://en.wikipedia.org/w/index.php?
title=HTTP&oldid=1193784884"
This page was last edited on 5 January 2024, at
16:52 (UTC). •
Content is available under CC BY-SA 4.0 unless
otherwise noted.