Adding helpful context to the response

Information Headers

Preliminaries

This note describes the information-headers module and how it can provide contextual information to make standard HTTP status codes more meaningful.

Every HTTP response has a three-digit status code. Their meanings are defined in various IETF RFCs. Oftentimes a response code is too generic and provides insufficient context to know how to troubleshoot a problem. The server's information-headers modules can provide that context.

An information header is a HTTP response header that begins with "rw-". The value associated with the header contains two parts: V1, an actual value; and V2, an expected value.

For example, if the rw-no-acceptable-type header contains a value like "V1=text/xml; V2=text/html, application/javascript", it means that the browser asked for a resource with the MIME-type shown in the first variable, V1 "text/xml", but the server is configured to only provide resources with the MIME-types shown in the second variable, V2 "text/html, application/javascript".

Some information headers only contain a single value when that is more germane; and some headers are self-explanatory and completely omit any value.

Refer to the other notes in this series to learn what conditions trigger each of these information headers.

rw-bad-range
rw-blue-cache-add
rw-blue-cache-dependency
rw-blue-cache-hit
rw-blue-cache-stale
rw-blue-dir-deleted
rw-blue-file-deleted
rw-blue-invalid-option
rw-blue-dep-deleted
rw-blue-res-deleted
rw-blue-lnk-deleted
rw-blue-unsupported-method
rw-conditional-range-failed
rw-content-decoding
rw-content-decoding
rw-content-length-limit
rw-content-length-missing
rw-content-range
rw-content-type-mismatch
rw-content-type-missing
rw-content-type-not-supported
rw-counters-unknown-extension
rw-counters-internal-error
rw-encoding-cache-add
rw-encoding-cache-add
rw-encoding-cache-hit
rw-encoding-dir-deleted
rw-encoding-file-deleted
rw-forbidden
rw-header-not-allowed
rw-hostname
rw-if-match
rw-if-none-match
rw-if-unmodified-since
rw-ip-access
rw-language-not-acceptable
rw-language-not-configured
rw-method-not-allowed
rw-no-acceptable-type
rw-no-cache-control
rw-origin-not-allowed
rw-path
rw-range-units-not-supported
rw-rbac-expired
rw-rbac-forbidden
rw-rbac-forged
rw-rbac-internal-error
rw-rbac-missing-credentials
rw-rbac-no-matching-role
rw-rbac-no-resource-rule
rw-rbac-remote-address
rw-rbac-renewal
rw-rbac-unsupported-action
rw-rbac-unsupported-content-type
rw-rbac-unsupported-method
rw-rbac-unsupported-scheme
rw-referer-nopush
rw-request-dir-deleted
rw-request-file-deleted
rw-request-file-not-deleted
rw-resource-path-illegal
rw-resource-path-length
rw-router-missing-module
rw-user-agent-nopush
rw-user-agent-noserve

Configuration

Like all of the server's extra modules, the information-headers module is not enabled unless explicitly set to "on" in the modules section.

EBNF

SP ::= U+20
CR ::= U+0D
LEFT-CURLY-BRACKET ::= U+7B
RIGHT-CURLY-BRACKET ::= U+7D
module-name ::= 'information-headers'
named-module-entry ::= module-name SP ('on' | 'off') CR
modules-section ::= 'modules' SP LEFT-CURLY-BRACKET CR
named-module-entry*
RIGHT-CURLY-BRACKET CR

Cookbook

Example 1: Information headers enabled
server {
modules {
information-headers on
}
}

Review

Key points to remember:

  • It is recommended to keep this module turned on both during development and while in production.
  • There is no performance penalty and no known security issues with having this module on.

Adding helpful context to the response