rfc-4236

HTTP Adaptation with Open Pluggable Edge Services (OPES)

A. Rousskov, M. Stecher
date2005-11 streamIETF areaapp wgopes statusPROPOSED STANDARD pages27 canonicalhttps://www.rfc-editor.org/rfc/rfc4236 doi10.17487/RFC4236
Open Pluggable Edge Services (OPES) framework documents several application-agnostic mechanisms such as OPES tracing, OPES bypass, and OPES callout protocol. This document extends those generic mechanisms for Hypertext Transfer Protocol (HTTP) adaptation. Together, application-agnostic OPES documents and this HTTP profile constitute a complete specification for HTTP adaptation with OPES. [STANDARDS-TRACK]

Extracted elements (27)

design-rationale §3.2.1

Requiring an error when an OCP agent receives an unlisted application message part is intended to reduce subtle interoperability problems where an agent believes its sent parts are understood by the other side when they are actually being ignored or skipped.

http

design-rationale §3.5

Skipping 'control' HTTP messages (e.g., 100 Continue, CONNECT) by default is prohibited because sensitive information might be relayed via crafted 100 Continue responses, or malicious CONNECT requests may evade callout services intended to handle them. The OPES processor cannot unilaterally decide a message is not worth adapting.

http, security

interoperability-note §4

OPES agents SHOULD use a single OPES-Via header-field rather than multiple equally-named fields to record a long trace. Using multiple equally-named extension header-fields is illegal from HTTP's point of view and may not work with OPES-unaware HTTP proxies.

http

normative-requirement §3.2.1 MUST

An OCP agent MUST NOT send (i.e., must skip) absent application message parts. An OCP agent MUST send present non-auxiliary parts and MUST send those present auxiliary parts that were negotiated via the Aux-Parts parameter.

http

normative-requirement §3.2.1 MUST

An OCP agent MUST send application message parts in the order implied by the profile parts lists. An OCP agent receiving an out-of-order part MAY terminate the transaction with an error.

http

normative-requirement §3.2.1 MUST NOT

An OPES processor MUST NOT send parts not listed as 'original' in the negotiated profile, and a callout server MUST NOT send parts not listed as 'adapted'. An OCP agent receiving an unlisted part MUST terminate the transaction with an error.

http

normative-requirement §3.7 MUST

An OPES processor removing transfer encodings MUST remove the Transfer-Encoding header before sending the header part to the callout service, and MUST send a correct Transfer-Encoding header to the next HTTP recipient regardless of what the callout server returned.

http

normative-requirement §3.8.2 MUST

An un-authoritative OPES processor MUST remove the Content-MD5 header unless it detects the HTTP message was not modified, in which case it MAY leave the header. HTTP intermediaries must not generate Content-MD5 headers per RFC 2616 section 14.15.

http

normative-requirement §3.7 MUST NOT

In the absence of explicit transfer-encoding negotiations, an OCP agent MUST NOT send transfer-encoded application message bodies. An agent MUST terminate the OCP transaction if it cannot remove all transfer encodings before sending a message body.

http

normative-requirement §3.2.1 MUST

In the request profile, the callout server MUST send either adapted request parts or adapted response parts, not both. An OPES processor receiving adapted flow with parts from both lists MUST terminate the OCP transaction with an error.

http

normative-requirement §4 MUST NOT

OPES entities MUST NOT place required tracing entries in a message trailer. Optional entries MAY be placed in a trailer provided trailer presence does not violate HTTP protocol.

http

normative-requirement §3.2.1 MUST

Unless explicitly configured to do otherwise, an OPES processor MUST offer all non-auxiliary original parts in Negotiation Offer (NO) messages. This prevents security flaws from selectively adapting only certain message types.

http

normative-requirement §3.5 MUST

Unless specifically configured otherwise, an OPES processor MUST forward all HTTP messages for adaptation, including 1xx responses, POST/CONNECT/OPTIONS requests, and extension methods. Only OPES bypass instructions, configured rules, or OCP negotiation are acceptable exceptions.

http

normative-requirement §3.8 MUST

When communicating with HTTP applications, OPES processors MUST ensure correctness of all computable HTTP headers (e.g., Content-Length, Content-MD5) in specifications they claim compliance with. By default, processors must validate and recalculate, add, or remove such headers.

http

protocol-element §3.1

Six HTTP application message part (am-part) atoms are defined: request-header, request-body, request-trailer, response-header, response-body, and response-trailer. Each corresponds to a well-defined portion of an HTTP message as specified in RFC 2616.

http

protocol-element §3.2.3

The Aux-Parts parameter allows negotiation of auxiliary application message parts in the HTTP response profile. An OPES processor MAY advertise available auxiliary parts; the callout server responds with a subset it requires.

http

protocol-element §3.2.7 MUST NOT

The Content-Encodings parameter allows a callout server to indicate preferred content encodings (e.g., gzip). The OPES processor MUST NOT bypass a service just because the actual content encoding does not match the service's preferences.

http

protocol-element §5

The OPES-Bypass HTTP extension header is defined to request OPES system bypass. Its value is either '*' (bypass all OPES agents) or a list of bypass-entry values identifying specific OPES agents by absoluteURI.

http

protocol-element §3.2.4

The Pause-At-Body parameter allows a callout server to request a pause in original application message body transmission before dataflow starts. Its value is an offset into the non-auxiliary message body, equivalent to receiving a Want Data Paused (DWP) message.

http

protocol-element §3.2.6

The Preservation-Interest-Body parameter specifies a fixed-size prefix of the original message body for which Data Preservation Interest (DPI) would apply. An OPES processor MUST behave as if it received a DPI message with org-offset zero and org-size equal to the parameter value.

http

protocol-element §3.2.5 MUST

The Stop-Receiving-Body parameter implies a Want Stop Receiving Data (DWSR) message behavior before original dataflow starts. An OPES processor MUST behave as if it received a DWSR message with the corresponding offset.

http

protocol-element §4

Two HTTP extension headers carry OPES trace entries: OPES-System (required, identifies the OPES system) and OPES-Via (optional, identifies individual OPES agents). An OPES System MUST add its trace entry to OPES-System; other OPES agents MUST use OPES-Via.

http

protocol-element §3.2

Two OCP HTTP profiles are defined: the request profile (URI: http://www.iana.org/assignments/opes/ocp/http/request) and the response profile (URI: http://www.iana.org/assignments/opes/ocp/http/response). The response profile includes auxiliary original parts (request-header, request-body, request-trailer) that carry the original HTTP request as metadata for response adaptation.

http

registry §8

IANA registers two HTTP OCP profile feature URIs using the registration procedure from OCP Core (RFC 4037): http://www.iana.org/assignments/opes/ocp/http/request and http://www.iana.org/assignments/opes/ocp/http/response.

registry, http

security-consideration §7 MUST NOT

Specific HTTP adaptation threats include rewriting the Request-URI of an HTTP CONNECT request or removing hop-by-hop Upgrade headers before an HTTP proxy can act on them. OPES agents MUST NOT perform such actions without HTTP client or server consent.

security, http

wire-format §3.3 SHOULD

The AM-EL named parameter for Application Message Start (AMS) messages carries the entity length (size) of the request-body (request profile) or response-body (response profile) before transfer codings are applied. An OCP agent SHOULD announce this when known; MUST NOT send it when unknown.

http

wire-format §3.4 MUST

The AM-Part named parameter for Data Use Mine (DUM) messages carries a single am-part token identifying which HTTP message part the DUM contains. An OCP agent MUST send AM-Part with every DUM message in an OCP transaction using an HTTP profile.

http