June 2006 Lemonade S. H. Maes Internet Draft: Lemonade TCP Challenged R. Cromwell Environments (Editors) Document: draft-maes-lemonade-tcp-challenged- environments-01 Expires: December 2006 June 2006 Lemonade in TCP Challenged Environments Status of this Memo By submitting this Internet-Draft, each author represents that any applicable patent or other IPR claims of which he or she is aware have been or will be disclosed, and any of which he or she becomes aware will be disclosed, in accordance with Section 6 of BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet- Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. This Internet-Draft will expire on November 30, 2006. Abstract The IETF lemonade group has defined extensions to the IMAP and SMTP protocols that provide optimizations for clients in a variety of settings, such as mobile networks. This document discusses issues related to deployments where TCP support in the client is degraded or non-existent, and techniques for overcoming these limitations. Conventions used in this document In examples, "C:" and "S:" indicate lines sent by the client and server respectively. Maes Expires – December 2006 [Page 1] June 2006 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. An implementation is not compliant if it fails to satisfy one or more of the MUST or REQUIRED level requirements for the protocol(s) it implements. An implementation that satisfies all the MUST or REQUIRED level and all the SHOULD level requirements for a protocol is said to be "unconditionally compliant" to that protocol; one that satisfies all the MUST level requirements but not all the SHOULD level requirements is said to be "conditionally compliant." When describing the general syntax, some definitions are omitted as they are defined in [RFC3501], [RFC821], and related documents. Table of Contents Status of this Memo...............................................1 Abstract..........................................................1 Conventions used in this document.................................1 Table of Contents.................................................2 1. Introduction and motivation....................................2 2. Techniques.....................................................3 2.1. Tunneling Approaches......................................3 2.1.1. Non-Persistent HTTP for Batch Connectivity Mode......5 2.1.2. Using Persistent HTTP/HTTPS + Chunked Transfer Encoding for Stream Connectivity Mode................7 2.1.3. Using HTTP as a binding for SMTP.....................8 3. Asynchronous Approaches........................................8 3.1. Transmission Methods......................................9 3.2. Authentication............................................9 3.3. Response Payload..........................................9 4. Tracking and Controlling Tunneled Traffic......................9 5. Security Considerations.......................................10 References.......................................................10 Future Work......................................................11 Version History..................................................11 Acknowledgments..................................................12 Authors Addresses................................................12 Intellectual Property Statement..................................12 Disclaimer of Validity...........................................13 Copyright Statement..............................................13 1. Introduction and motivation The IETF lemonade working group is designing a set of extensions to IMAP and SMTP to facilitate access to internet email in diverse service environments, such as on resource constrained devices, and Maes Expires – December 2006 [Page 2] June 2006 slow or high latency networks. The preferred model and best current practices for doing this is described in [DEPLOYMENTS]. Not all networks and clients permit the preferred deployment model at this point in time, such as some devices which do not provide a TCP stack to the application (some mobile phones and set-top box environments), and some networks with very high and unpredictable latency like satellite networks. Over time, it is expected that as technology improves, some of these limitations will be lifted to permit deployment using best current practices. However, it is desirable to provide some form of access for users of these networks until that time. 2. Techniques Examples of major markets that have some TCP limitations include: - Some Java MIDP devices do not permit arbitrary TCP, but do permit HTTP - TV Set-top box providers which may provide degraded TCP or HTTP over MPEG-2 - Global satellite wireless networks which provide email in remote environments and at sea. This document considers two techniques to overcome these difficulties. The first is HTTP Tunneling to attempt regular IMAP and SMTP layered on top of HTTP. The second technique is a URL mapping approach which uses [IMAPURL] as a compact representation for sending batches of IMAP commands over severely limited physical networks like two-way satellite networks. Servers and clients adhering to this draft MUST support HTTP tunneling, and MAY support section 3's IMAPURL approach. 2.1. Tunneling Approaches There are two approaches for achieving tunneling over HTTP, depending on whether keep-alive chunked-transfer-encoded is supported by any intermediaries in the network (i.e. HTTP proxy servers) or not. The general approach is to use a content-type for packaging a payload of IMAP commands, described below. To use HTTP/HTTPS as the transfer protocol for IMAP commands and responses between the IMAP client and server, the client MUST send an HTTP POST request to the server, and embed IMAP commands (commands to an IMAPv4 Rev1 server or IMAP servers supporting Lemonade extensions) in the body of the request. A server MUST reject a HTTP GET request from the client. The content-type header of the POST request MUST be set to "application/vnd.lemonade.imap". Multiple IMAP commands may Maes Expires – December 2006 [Page 3] June 2006 be included in one POST request. In general, the HTTP server is expected to preserve session state between HTTP commands to the best of its ability, therefore the client does not need to reauthenticate and reissue a SELECT until it receives an (IMAP) error response showing that it is not authenticated. In what follows, the term Lemonade client/server is used to refer to a client/server that supports both IMAPv4 Rev1 as well as any LEMONADE extensions. When the HTTP binding is used, the Lemonade server listens on whatever port has been configured for this. The following is an example of a Lemonade HTTP request: POST /lemonadePath HTTP/1.1 Content-Type: application/vnd.lemonade.imap X-Http-Binding: imap [other headers] ( SP | literal ) [( SP | literal )] The Lemonade command MUST be plain text (7bit). Multiple Lemonade commands MAY be sent on the same request. The client must be able to deal with recovering from errors when commands are batched. See RFC2442 Batch SMTP for a further discussion. In general, if a command is expected to produce a synchronized literal or continuation request, it MUST be the last command in the batch. The Content-Type and X-Http-Binding headers are the only HTTP headers that MUST be sent to a Lemonade server. Other headers such as Cache- Control MAY be included. When the Lemonade server sends back a response it is in following format: HTTP/1.1 Content-Type: application/vnd.lemonade.imap X-Http-Binding: imap [] SP [] SP The Lemonade Server uses the following HTTP status codes, and what each code indicates is given below: Maes Expires – December 2006 [Page 4] June 2006 - 200 -This indicates normal execution of the Lemonade commands from an IMAP perspective. The client should further parse the response body to get the tagged responses to the commands and process those accordingly. - 401 - This indicates that the execution of the IMAP commands might have been successful, but the session is no longer authenticated. The client should try to reauthenticate to the IMAP server, and then resend the commands. - 5xx - This indicates that at least one command was malformed/protocol level error, or, a command could not complete due to a problem in the IMAP server. In conforming to HTTP semantics, this means the IMAP server responses such as BAD or NO on a tagged response generate a HTTP 500 response code. Also, if the HTTP request includes batched commands after the command which generates a continuation request or synchronized literal, the server MUST generate a 5xx request. When using HTTP to transfer IMAP commands and responses, the client SHOULD utilize built-in features of HTTP to their advantage. For example, the client SHOULD use HTTPS instead of HTTP whenever possible, since HTTPS has built in encryption and MAY have compression capabilities. HTTP can be used in both batch and stream modes. Details about these transport modes are given in the following two subsections. 2.1.1. Non-Persistent HTTP for Batch Connectivity Mode If the client uses a traditional HTTP connection (either by establishing a different socket for each HTTP request to the Lemonade server, or by reusing the same socket for all HTTP requests, but sending each request in different HTTP commands), it has batch connectivity to the server. The client can issue as many commands as it would like in one HTTP request to the server, and the server responds by sending back one HTTP response with all the responses to all the commands in the HTTP request. With this connectivity mode, the IDLE command nor any commands that depend on unsolicited responses in a session. Other commands that use a continuation response or synchronized literal cannot be issued unless they are the last command in the batch. [LITERAL+] SHOULD be used to eliminate synchronized literals when using APPEND. Maes Expires – December 2006 [Page 5] June 2006 In order for the server to identify separate HTTP requests as belonging to the same session, a batch HTTP client needs to accept cookies. A session-id is passed in the cookie to identify the session. Example: the headers for a HTTP batch response after the client has issued its first HTTP request to the server. HTTP/1.1 Content-Type: application/vnd.lemonade.imap X-Http-Binding: imap Set-Cookie:JSESSIONID=94571a8530d91e1913bfydafa; path=/lemonade [] SP [[] SP ] Example: the headers for a HTTP batch response after the client has issued its first HTTP request to the server, with the final command generating a continuation request. HTTP/1.1 200 Ok Content-Type: application/vnd.lemonade.imap X-Http-Binding: imap Set-Cookie:JSESSIONID=94571a8530d91e1913bfydafa; path=/lemonade [] SP +continuation-request The client must then save this cookie and send it back to the server with the next request in order for the server to reattach these commands to the same session as the previous commands. POST /lemonadePath HTTP/1.1 Content-Type: application/vnd.lemonade.imap X-Http-Binding: imap Cookie: JSESSIONID=94571a8530d91e1913bfydafa [other headers] SP [ SP ] Maes Expires – December 2006 [Page 6] June 2006 2.1.2. Using Persistent HTTP/HTTPS + Chunked Transfer Encoding for Stream Connectivity Mode It is possible to use persistent HTTP or persistent HTTPS plus chunked-transfer-encoding so that the client and server can use stream style communications. The client needs to open a persistent HTTP connection and keep it active. In this case, the HTTP headers must be sent the first time the client device opens the connection to the Lemonade Server and these headers MUST set the transfer coding to be chunk-encoded [RFC2616, Sec. 3.6.1]. All subsequent client-server requests are written to the open connection, without needing any additional HTTP headers. In this case, the client does not need to accept cookies. The client must send the HTTP headers one time only: POST /lemonadeServletPath HTTP/1.1 Content-Type: application/vnd.lemonade.imap Connection: keep-alive X-Http-Binding: imap Pragma: no-cache Transfer-Encoding: chunked The server responds with the following header: HTTP/1.1 Cache-Control: private Keep-Alive: timeout=15, max=100 (or other suitable setting) Connection: Keep-Alive X-Http-Binding: imap Transfer-Encoding: chunked Content-Type: application/vnd.lemonade.imap Then the client can send a command anytime it wants with the following format: SP And example of an actual client command is: e 2 CAPABILITY The server responds to each command with as many untagged responses as needed, and one tagged response, where each response is in the format that follows: Maes Expires – December 2006 [Page 7] June 2006 An actual Server response might be: d5 * CAPABILITY IMAP4REV1 AUTH=LOGIN NAMESPACE SORT MULTIAPPEND LITERAL+ UIDPLUS IDLE XORACLE X-ORACLE-LIST X-ORACLE-COMMENT X- ORACLE-QUOTA X-ORACLE-PREF X-ORACLE-MOVE X-ORACLE-DELETE ACL X- ORACLE-PASSWORD LDELIVER LZIP LCONVERT LFILTER LSETPREF LGETPREF 1b 2 OK CAPABILITY completed Note however that the HTTP protocol is in general not meant to be used in such a way. To maintain such an open channel might be a practical challenge to proxies, which might not forward the requests chunk by chunk to the server, and meanwhile route responses back to the client chunk by chunk. Consequently the session closes. Chunked transfer encoding requests MAY not be honored by an HTTP proxy server. In cases where such requests are denied, the client should be prepared to use the non-chunked encoding technique from section 2.1.1. The session may be automatically started again by the client after a lost connection or by the server through out-of-band; after some defined time-out. 2.1.3. Using HTTP as a binding for SMTP All of the techniques described in sections 2.1 may be used for SMTP as well. The only difference between IMAP and SMTP will be the HTTP URL used. Servers implementing the HTTP binding are expected to differentiate between IMAP and SMTP protocol bodies via the URL. 3. Asynchronous Approaches Some networks, such as satellite networks, may present challenges to the HTTP request-response approach in the preceding chapter due to extreme latency. Clients expecting near-synchronous response to IMAP commands would face huge delays, and may inappropriately timeout too soon, or provide a UI to the user that is geared around immediate response which will expose long delays to end users. Satellite networks resemble store-and-forward systems, it is thus desirable to provide a mechanism for interacting with an IMAP Maes Expires – December 2006 [Page 8] June 2006 Lemonade server that is geared for asynchronous requests and responses. [IMAPURL] already provides a standard for encoding a series of IMAP commands into a compact URL, and describes a subset of functionality that is adequately suited to accessing email when roaming on satellite networks. 3.1. Transmission Methods It is not in the scope of this document to describe the mechanism by which IMAPURL payloads are sent through such networks (which are typically proprietary) However, the end result should be an HTTP request invoked on a server which decodes the IMAPURL payload and processes the request on behalf of the client. IMAPURLs of the form imap:///path?query where iserver = [iuserinfo "@"] host [":" port] must be rewritten into a URL of the following form: http://host:port/lemonade?imapurl= where is imap:///path?query encoded according to standard HTTP url encoding. 3.2. Authentication <> 3.3. Response Payload The response to any IMAPURL processed according to [IMAPURL] on the server should be sent to the client as a set of raw IMAP responses. However, [IMAPURL] suggests that the result of a search should be to fetch all the messages returned from the SEARCH. For the purposes of this document, the result of an IMAPURL containing a search should be the SEARCH response from the IMAP server, without performing any FETCHes. 4. Tracking and Controlling Tunneled Traffic In order to simplify deployment and provisioning issues, as well as help network administrators track and control IMAP/SMTP traffic wrapped in HTTP requests, the HTTP requests and responses of a Maes Expires – December 2006 [Page 9] June 2006 binding should provide a non-ambiguous way of recognizing binding traffic. It is therefore mandated that a "X-HTTP-Binding" HTTP header MUST specified in all requests and responses. The header may take a value of "imap" or "smtp" depending on the type of traffic being tunneled. 5. Security Considerations The HTTPS protocol can and should be used to provide end-to-end security where it is available when tunneling, especially because of the existence of HTTP proxies. Caching is also a concern, especially if HTTPS isn't used. The client SHOULD use the HTTP Cache-Control directive (no-cache, no-store, must-revalidate, or combinations thereof) to inform proxy servers, origin servers, and client libraries not to cache or store the HTTP response. To deal with HTTP 1.0 servers that may exist in the network, Pragma: no-cache should be used as well. Attacks on HTTP sessions and the HTTP server may also be a concern, since the HTTP server is maintaining an authenticated session to the IMAP server on behalf of the user in most cases. Network administrators wishing to block stealth deployments of HTTP IMAP bindings may block HTTP requests with Content-Type application/vnd.lemonade.[imap|smtp] via an application level firewall and/or block any HTTP traffic with the X-Http-Binding header defined. References [DEPLOYMENTS] Gellens, R., " Deployment Considerations for lemonade- compliant Mobile Email", draft-ietf-lemonade-deployments-03.txt, June 2006. [LEMONADEPROFILE] Maes, S.H. and Melnikov A., "Lemonade Profile", draft-ietf-lemonade-profile-XX.txt, (work in progress). [LUOTONEN] Luotonen, A., “Tunneling TCP based protocols through Web proxy servers”, draft-luotonen-web-proxy-tunneling-01.txt, August 1998 [LITERAL+] Myers, J. “IMAP non-synchronizing literals”, RFC2088, January 1997 http://www.ietf.org/rfc/rfc2088 Maes Expires – December 2006 [Page 10] June 2006 [P-IMAP] Maes, S.H., Lima R., Kuang, C., Cromwell, R., Ha, V. and Chiu, E., Day, J., Ahad R., Jeong W-H., Rosell G., Sini, J., Sohn S- M., Xiaohui F. and Lijun Z., "Push Extensions to the IMAP Protocol (P-IMAP)", draft-maes-lemonade-p-imap-xx.txt, (work in progress). [RFC2119] Brader, S. "Keywords for use in RFCs to Indicate Requirement Levels", RFC 2119, March 1997. http://www.ietf.org/rfc/rfc2119 [RFC2442] Freed, N. et al. "The Batch SMTP Media Type", RFC 2442, November 1998. http://www.ietf.org/rfc/rfc2442 [RFC2616] Fielding, R. et al. "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. http://www.ietf.org/rfc/rfc2616 [RFC2817] Khare, R., “Upgrading to TLS Within HTTP/1.1”, RFC2817, May 2000 http://www.ietf.org/rfc/rfc2817.txt, May 2000 [RFC3205] Moore, K. ”On the use of HTTP as a Substrate”, RFC 3205, February 2002. http://www.ietf.org/rfc/rfc3205 [RFC3501] Crispin, M. "IMAP4, Internet Message Access Protocol Version 4 rev1", RFC 3501, March 2003. http://www.ietf.org/rfc/rfc3501 Future Work - Detail normative statements on binding method to support versus other options that were considered. Version History Release 01 Change name and focus to TCP challenged environment Emphasize usage in challenged network and platform environments Added more examples of challenged environments Discussion of IMAPURL for satellite networks, New X-HTTP-Binding header Normative statements Release 00 Rename from firewall binding. Maes Expires – December 2006 [Page 11] June 2006 Acknowledgments The authors want to thank all who have contributed key insight and extensively reviewed and discussed the concepts in this draft as well as the authors of the early introduction of the binding concept in [P-IMAP]. Authors Addresses Stephane H. Maes Oracle Corporation 500 Oracle Parkway M/S 4op634 Redwood Shores, CA 94065 USA Phone: +1-650-607-6296 Email: stephane.maes@oracle.com Ray Cromwell Oracle Corporation 500 Oracle Parkway Redwood Shores, CA 94065 USA Nilo Mitra Ericsson Tel: +1 212-843-8451 Email: nilo.mitra@ericsson.com Intellectual Property Statement The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79. Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr. Maes Expires – December 2006 [Page 12] June 2006 The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf- ipr@ietf.org. Disclaimer of Validity This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Copyright Statement Copyright (C) The Internet Society (2006). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Maes Expires – December 2006 [Page 13]