<?xml version="1.0"?>
<?xml-stylesheet type='text/xsl'
	href='http://xml.resource.org/authoring/rfc2629.xslt' ?>

<?rfc strict='yes' ?>
<?rfc toc='yes' ?>
<?rfc symrefs='yes' ?>
<?rfc editing='no' ?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd">

<rfc ipr="full2026" docName="draft-ietf-opes-http">

<front>
	<title>HTTP adaptation with OPES</title>

	<?rfc include='author.rousskov.xml' ?>
	<?rfc include='author.stecher.xml' ?>

	<date day="14" month="July" year="2003" />

	<area>Applications</area>
	<workgroup>Open Pluggable Edge Services</workgroup>
	<keyword>Internet-Draft</keyword>
	<keyword>HTTP</keyword>
	<keyword>callout protocol</keyword>
	<keyword>OCP</keyword>
	<keyword>OPES tracing</keyword>
	<keyword>OPES bypass</keyword>

	<abstract>

		<t>Open Pluggable Edge Services (OPES) framework documents several
		application-agnostic mechanisms such as OPES tracing, OPES bypass, and
		OPES callout protocol. This document binds those mechanisms to a
		specific application protocol, HTTP.  Together, application-agnostic
		OPES documents and this HTTP binding constitute a complete
		specification for HTTP adaptation with OPES.</t>

	</abstract>

</front>

<middle>

<section anchor="intro" title="Introduction">

	<t>Open Pluggable Edge Services (OPES) framework documents several
	application-agnostic mechanisms such as OPES tracing and bypass [XXX] or
	OPES callout protocol [XXX]. This document binds those mechanisms to a
	specific application protocol, HTTP [XXX].  Together, application-agnostic
	OPES documents and this HTTP binding constitute a complete specification
	for HTTP adaptation with OPES.</t>

	<t>The primary sections of this document specify HTTP bindings to the
	corresponding application-agnostic mechanisms documented
	elsewhere.</t>

</section>

<section anchor="section_tracing" title="Tracing">

	<t>(XXX: document OPES-Trace HTTP extension-header)</t>

</section>

<section anchor="section_bypass" title="Bypass">

	<t>(XXX: document OPES-Bypass HTTP extension-header)</t>

</section>

<section anchor="section_ocp" title="Callout Protocol">

<section anchor="section_ocp-app-profile" title="Application Profile Features">

	<t>Two HTTP profiles are defined for OCP, depending on the original and
	adapted parts exchanged between OCP agents. These profiles are described
	below. For both profiles, the feature identifier as well as original and
	adapted parts are documented; optional parts are marked.
	Note that not all original parts are meant to be adapted.
	The order of parts within each flow is mandatory.
	(XXX: but one might receive a response before a complete request is sent!)
	Optional parts MUST be indicated as feature parameters, i.e. they are
	optional in the profile feature description, but once the agents
	negotiated a profile with optional parts, those parts become mandantory.</t>

	<t><list style="hanging">

		<t hangText="http://iana.org/opes/ocp/HTTP/request"><list
		style="hanging">

			<t hangText="original parts:">request-header, request-body,
			request-trailer</t>

			<t hangText="adapted parts:">request-header, request-body,
			request-trailer</t>

		</list></t>

		<t hangText="http://iana.org/opes/ocp/HTTP/response"><list
		style="hanging">

			<t hangText="original parts:">request-header (optional),
			request-body (optional), request-trailer (optional),
			response-header, response-body,	response-trailer</t>

			<t hangText="adapted parts:">response-header, response-body,
			response-trailer</t>

		</list></t>

	</list></t>
	
	<t>An agent agreeing to use a given profile during negotiation MUST send,
	accept, and adapt corresponding application message parts for the duration
	of the OCP connection (the profile scope).  If the agent is unable to send
	a part, it MUST NOT initiate the transaction or MUST abort already
	initiated transaction. If an agent does not receive an expected part, and
	the missing part has not default value, the agent MUST abort the
	transaction. If an agent receives an unexpected part, the agent MUST abort
	the transaction. Application message part expectancy is determined based
	on part identifier alone (and not content).</t>

	<t>Example:</t>
	<figure anchor="figure_ocp-app-profile">
		<artwork><![CDATA[
		NO ({"38:http://iana.org/opes/ocp/HTTP/response"},
		{"38:http://iana.org/opes/ocp/HTTP/response" request-header});
		NR {"38:http://iana.org/opes/ocp/HTTP/response" request-header};
		]]></artwork>
	</figure>
	
	<t>Note that the line break in the NO message is for rendering purpose
	in this document only; the real message MUST NOT have that line break.</t>
	
	<t>The OPES processor offers two profile features, both specify HTTP responses;
	the first profile includes the standard parts only, the second profile includes
	also the HTTP request header part. The callout server selects the
	profile with the additional HTTP request information.
	The application message sent by the OPES processor will then contain the
	parts request-header, response-header, response-body, response-trailer
	(in this order) and the callout server will respond with the parts
	response-header, response-body, response-trailer.</t>

</section>

<section anchor="section_ocp-body-encoding" title="Application Body Encoding Feature">

	<t>(XXX: document HTTP message body encoding feature)</t>

</section>

<section anchor="section_ocp-msg-parts" title="Application Message Parts">

	<t>(XXX: document HTTP-specific values of AM-Part:
	named-parameter of Data Use Mine (DUM) OCP message)</t>

</section>

</section> <!-- section_ocp -->

<section anchor="section_iab" title="IAB Considerations">

	<t>OPES treatment of IETF Internet Architecture Board (IAB) <xref
	target="RFC3238">considerations</xref> are documented in [XXX].</t>

</section>

<section anchor="section_security" title="Security Considerations">

	<t>Application-independent security considerations are documented
	in application-agnostic OPES specifications. HTTP binding does
	not introduce any HTTP-specific security considerations (XXX:
	really?).</t>

</section>

<section anchor="section_compliance" title="Compliance">

	<t>Compliance with OPES mechanisms is defined in corresponding
	application-agnostic specifications.  HTTP-specific bindings for those
	mechanisms use corresponding compliance definitions from those
	specifications, as if each binding was incorporated into the
	application-agnostic specification it binds to.</t>

</section>

<section anchor="section_todo" title="To-do">

	<t><list style="hanging">

		<t hangText="XXX:">Fix all XXXs.</t>

	</list></t>

</section>

<appendix anchor="section_acks" title="Acknowledgements">

	<t>Special thanks to Marshall Rose for his xml2rfc tool.</t>

</appendix>

<appendix anchor="section_change_log" title="Change Log">

	<t>Internal WG revision control ID: $Id: http.xml,v 1.15 2003/07/14 20:13:59 rousskov Exp $</t>

	<t><list style="hanging">

	<t hangText="head-sid13"><list style="symbols">

		<t>Removed HTTP-transaction profile, added
		optional parts as feature parameters, added example.</t>

	</list></t>

	<t hangText="head-sid12"><list style="symbols">

		<t>Initial revision.</t>

	</list></t>

	</list></t>

</appendix>

</middle>

<back>

<references title='Normative References'>

<!--
<?rfc include='reference.RFC.2119.xml' ?>
<?rfc include='reference.RFC.2234.xml' ?>
<?rfc include='reference.RFC.2396.xml' ?>
<?rfc include='reference.I-D.ietf-opes-architecture.xml' ?>
-->
<?rfc include='reference.RFC.2616.xml' ?>

</references>

<references title='Informative References'>

<!--
<?rfc include='reference.I-D.ietf-opes-protocol-reqs.xml' ?>
<?rfc include='reference.I-D.ietf-opes-scenarios.xml' ?>
<?rfc include='reference.I-D.ietf-fax-esmtp-conneg.xml' ?>
<?rfc include='reference.RFC.3080.xml' ?>
-->
<?rfc include='reference.RFC.3238.xml' ?>

</references>

</back>

</rfc>
