ch03: HTTP Messages
Last updated
Last updated
How messages flow
The three parts of HTTP messages(start line, headers, and entity body)
The different parts of HTTP request and response messages
The various functions(methods) that request messages support
The various status codes that are returned with response messages
What the various HTTP headers do
HTTP uses the terms inbound and outbound to describe transactional direction:
HTTP messages flow like rivers. All messages flow, downstream, regardless of whether they are request messages or response messages. The sender of any message is upstream of the receiver:
Here's the format for a request message:
Here's the format for a response message:
The start line for a request message says what to do. The start line for a response message says what happended.
2.2.1 Request line
Request line contains a method, a request URL and HTTP version.
2.2.2 Response line
Response line contains the HTTP version, a numeric status code and a textual reason phrase.
2.2.3 Methods
Common HTTP methods:
Method
Description
Message body?
GET
Get a document from the server.
No
HEAD
Get just the headers for a document from the server.
No
POST
Send data to the server for processing.
Yes
PUT
Store the body of the request on the server.
Yes
TRACE
Trace the message through proxy servers to the server.
No
OPTIONS
Determine what methods can operate on a server.
No
DELETE
Remove a document from the server.
No
Not all servers implement all seven of the methods. HTTP was designed to be easily extensible, other servers may implement their own request methods in addition to these, called extension methods.
2.2.4 Status codes
Status code classes:
Overrall range
Defined range
Category
100-199
100-101
Informational
200-299
200-206
Successful
300-399
300-305
Redirection
400-499
400-415
Client error
500-599
500-505
Server error
2.2.5 Version numbers
The version number indicates the highest version of HTTP that an application supports.
Note that version numbers are not treated as fractional numbers. Each number in the version is treated as a sepatate number. So, when comparing HTTP versions, each number must be compared separately in order to determine which is the higher version. For example, HTTP /2.22 is a higher version than HTTP/2.3, because 22 is a larger number than 3.
HTTP header fields add additional information to request and response messages.
2.3.1 Header classfications
The HTTP specification defines several header fields. Applications also are free to invent their own home-brewed headeres. HTTP headers are classified into:
General headers
Can appear in both request and response messages.
Request headers
Provide more information about the request.
Response headers
Provide more information about the response.
Entity headers
Describe body size and contents, or the resource itself.
ESxtension headers
New headers that are not defined in the specification.
Common header examples:
Header example
Description
Date: Tue, 3 Oct 1997 02:16:03 GMT
The date the server generated the response
Content-length: 15040
The entity body contains 15040 bytes of data
Content-type: image/gif
The entity body is a GIF image
Accept: image/gif, image/jpec, text/html
The client accepts GIF and JPEG images and HTML
2.3.2 Header continuation lines
Long header lines can be made more readable by breaking them into multiple lines, preceding each extra line with at least one space or tab character:
Optional. Entity bodies are the payload of HTTP messages. They are the things that HTTP was designed to transport.
A far simpler protocol:
To be compliant with HTTP Version 1.1, a server need implement only the GET and HEAD methods for its resources.
HTTP defines a set of methods that are called safe methods. The GET and HEAD methods are said to be safe, meaning that no action should occur as a result of an HTTP request that uses either the GET or HEAD method.
GET is the most common method. It usually is used to ask a server to send a resource. HTTP/1.1 requires to implement this method:
The HEAD method behaves esxactly like the GET method, but the server returns only the headers in the response. This allows a client to inspect the headers for a resource without having to actually get the resource. Using HEAD, you can:
Find out about a resource(e.g., determine its type) without getting it.
See if an object exists, by looking at the status code of the response.
Test if the resource has been modified, by looking at the headers.
The PUT method writes documents to a server:
The semantics of the PUT method are for the server to take the body of the request and either use it to create a new document named by the requested URL or, if that URL already exists, use the body to replace it.
The POST method was designed to send input data to the server. In practice, it is often used to support HTML forms:
When a client makes a request, that request may have to travel through firewalls, proxies, gateways, or other applications. Each of these has the opportunity to modify the original HTTP request. The TRACE method allows clients to see how its request looks when it finally makes it to the server:
The TRACE method is used primarily for diagnostics.
No entity body can be sent with a TRACE request. The entity body of the TRACE response contains, verbatim, the request that the responding server received.
The OPTIONS method asks the server to tell us about the various supported capabilitites of the web server:
The DELETE method asks the server to delete the resources specified by the request URL. The HTTP specification allows the server to override the request without telling the client:
If you define an extension method, it's likely not to be understood by most HTTP applications. Likewise, it's possible that your HTTP applications could run into extension methods being used by other applications that it does not understand.
Proxies should try to relay messages with unknown methods through to downstream servers if they are capable of doing that without breaking end-to-end behavior.
Status code
Reason phrase
Meaning
100
Continue
Indicates that an initial part of the request was received and the client should continue. After sending this, the server must respond after receiving the request.
101
Switching Protocols
Indicates that the server is changing protocols, as specified by the client, to one listed in the Upgrade header.
4.1.1 Clients and 100 Continue
If a client is sending an entity to a server and is willing to wait for a 100 Continue response before it sends the entity, the client needs to send an Except request header with the value 100-continue.
A client application should really use 100-continue only to avoid sending a server a large entity that the server will not be able to handle or use.
Clients that send an Except header for 100-continue should not wait forever for the server to send a 100 Continue response. After some timeout, the client should just send the entity.
4.1.2 Servers and 100 Continue
When receiving the Expect header and 100-continue value, the server should respond with either 100 Continue response or an error code.
Status code
Reason phrase
Meaning
200
OK
Request is okay.
201
Created
For requests that create server objects(PUT). The entity body of the response should contain the various URLs for referencing the created resource, with the Localtion header cantaining the most specific reference.
202
Accepted
The request was accepted, but the server has not yet performed any action with it. There are no guarantees that the server will complete the request; this just means that the request looked valid when accepted.
203
Non-Authoritative Information
204
No Content
205
Reset Content
Another code primarily for browsers. Tells the browser to clear any HTML form elements on the current page.
206
Partial Content
A partial or range request was successful.
The redirection status codes either tell clients to use alternate locations for the resources they're interested in or provide an alternate response instead of the content:
If-Modified-Since:
Status code
Reason phrase
300
Multiple Choices
301
Moved Permanently
302
Found
303
See Other
304
Not Modified
305
Use Proxy
306
(Unused)
307
Temporary Redirect
Status code
Reason phrase
400
Bad Request
401
Unauthorized
402
Payment Required
403
Forbidden
404
Not Found
405
Method Not Allowed
406
Not Acceptable
407
Proxy Authentication Required
408
Request Timeout
409
Conflict
410
Gone
411
Length Required
412
Precondition Failed
413
Request Entity Too Large
414
Request URI Too Long
415
Unsupported Media Type
416
Requested Range Not Statisfiable
417
Exception Failed
Status code
Reason phrase
500
Internal Server Error
501
Not Implemented
502
Bad Gateway
503
Service Unavailable
504
Gateway Timeout
505
HTTP Version Not Supported
Headers and methods work together to determine what clients and servers do.
General headers
These are generic headers used by both clients and servers.
Request headers
Are specific to request messages, providing extra information to servers.
Response headers
Provide information to the client.
Entity headers
Deal with the entity body.
Extension headers
HTTP programs need to tolerate and forward extension headers, even if they don't know what the headers mean.
Header
Description
Connection
Allows clients and servers to specify options about the request/response connection
Date
Provides a date and time stamp telling when the message was created
MIME-Version
Gives the version of MIME that the sender is using
Trailer
Lists the sest of headers that are in the trailer of a message encoded with the chunked transfer encoding
Transfer-Encoding
Tells the receiver what encoding was performed on the message in order for it to be transported safely
Upgrade
Gives a new version or protocol that the sendesr would like to "upgrade" to using
Via
Shows what intermediaries(proxies, gateways) the message has gone through
Cache-Control
Used to pass caching directions along with the message
Pragma
Another way to pass directions along with the message, though not specific to caching
Header
Description
Client-IP
Provides the IP address of the machine on which the client is running
From
Provides the email address of the client's user
Host
Gives the hostname and port of the server to which the request is being sent
Referer
Provides the URL of the document that contains the current request URI
User-Agent
Tells the server the name of the application making the request
Accept headers give the client a way to tell servers their preferences and capabilities.
Header
Description
Accept
Tells the server what media types are okay to send
Accept-Charset
Tells the server what charsets are okay to send
Accept-Encoding
Tells the server what encodings are okay to send
Accept-Language
Tells the server what languages are okay to send
TE
Tells the server what extension transfer codings are okay to use
Header
Description
Age
How old the response is
Public
A list of request methods the server supports for its resources
Server
The name and version of the server's application software
Header
Description
Allow
Lists the reqeust methods that can be performed on this entity
Location
Tells the client where the entity really is located; used in direction the receiver to a location for the resource
Messages consist of three parts: start line describing the message, a block of headers containing attributes, and an optional body containing data: