known_client_problems.html revision 2eaf662cbc81e823e8d9aeb8d54e69e63032493e
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <meta name="generator" content="HTML Tidy, see www.w3.org" />
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <!--#include virtual="header.html" -->
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <h1 align="CENTER">Known Problems in Clients</h1>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <p>Over time the Apache Group has discovered or been notified
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi of problems with various clients which we have had to work
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi around, or explain. This document describes these problems and
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi the workarounds available. It's not arranged in any particular
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi order. Some familiarity with the standards is assumed, but not
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi necessary.</p>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <p>For brevity, <em>Navigator</em> will refer to Netscape's
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi Navigator product (which in later versions was renamed
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi "Communicator" and various other names), and <em>MSIE</em> will
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi refer to Microsoft's Internet Explorer product. All trademarks
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi and copyrights belong to their respective companies. We welcome
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi input from the various client authors to correct
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi inconsistencies in this paper, or to provide us with exact
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi version numbers where things are broken/fixed.</p>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi href="ftp://ds.internic.net/rfc/rfc1945.txt">RFC1945</a>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi href="ftp://ds.internic.net/rfc/rfc2068.txt">RFC2068</a>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi defines HTTP/1.1. Apache as of version 1.2 is an HTTP/1.1
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi server (with an optional HTTP/1.0 proxy).</p>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <p>Various of these workarounds are triggered by environment
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi variables. The admin typically controls which are set, and for
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi which clients, by using <a
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi href="/mod/mod_browser.html">mod_browser</a>. Unless
a23343e9e4e0b555b1bcfa99a7455e0e28117a3dJean-Noel Rouvignac otherwise noted all of these workarounds exist in versions 1.2
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi and later.</p>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <h3><a id="trailing-crlf" name="trailing-crlf">Trailing CRLF on
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <p>This is a legacy issue. The CERN webserver required
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <code>POST</code> data to have an extra <code>CRLF</code>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi following it. Thus many clients send an extra <code>CRLF</code>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi that is not included in the <code>Content-Length</code> of the
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi request. Apache works around this problem by eating any empty
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi lines which appear before a request.</p>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <h3><a id="broken-keepalive" name="broken-keepalive">Broken
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <p>Various clients have had broken implementations of
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <em>keepalive</em> (persistent connections). In particular the
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi Windows versions of Navigator 2.0 get very confused when the
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi server times out an idle connection. The workaround is present
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi in the default config files:</p>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <code>BrowserMatch Mozilla/2 nokeepalive</code>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi </blockquote>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi Note that this matches some earlier versions of MSIE, which
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi began the practice of calling themselves <em>Mozilla</em> in
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi their user-agent strings just like Navigator.
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <p>MSIE 4.0b2, which claims to support HTTP/1.1, does not
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi properly support keepalive when it is used on 301 or 302
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi (redirect) responses. Unfortunately Apache's
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <code>nokeepalive</code> code prior to 1.2.2 would not work
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi href="http://www.apache.org/dist/httpd/patches/apply_to_1.2.1/msie_4_0b2_fixes.patch">
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi this patch</a> to version 1.2.1. Then add this to your
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <code>BrowserMatch "MSIE 4\.0b2;" nokeepalive</code>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi </blockquote>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi name="force-response-1.0">Incorrect interpretation of
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <p>To quote from section 3.1 of RFC1945:</p>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi HTTP uses a "<MAJOR>.<MINOR>" numbering scheme to
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi indicate versions of the protocol. The protocol versioning
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi policy is intended to allow the sender to indicate the format
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi of a message and its capacity for understanding further HTTP
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi communication, rather than the features obtained via that
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi communication.
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi </blockquote>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi Since Apache is an HTTP/1.1 server, it indicates so as part of
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi its response. Many client authors mistakenly treat this part of
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi the response as an indication of the protocol that the response
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi is in, and then refuse to accept the response.
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <p>The first major indication of this problem was with AOL's
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi proxy servers. When Apache 1.2 went into beta it was the first
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi wide-spread HTTP/1.1 server. After some discussion, AOL fixed
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi their proxies. In anticipation of similar problems, the
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <code>force-response-1.0</code> environment variable was added
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi to Apache. When present Apache will indicate "HTTP/1.0" in
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi response to an HTTP/1.0 client, but will not in any other way
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi change the response.</p>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <p>The pre-1.1 Java Development Kit (JDK) that is used in many
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi clients (including Navigator 3.x and MSIE 3.x) exhibits this
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi problem. As do some of the early pre-releases of the 1.1 JDK.
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi We think it is fixed in the 1.1 JDK release. In any event the
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi workaround:</p>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <code>BrowserMatch Java/1.0 force-response-1.0<br />
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi BrowserMatch JDK/1.0 force-response-1.0</code>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi </blockquote>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <p>RealPlayer 4.0 from Progressive Networks also exhibits this
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi problem. However they have fixed it in version 4.01 of the
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi player, but version 4.01 uses the same <code>User-Agent</code>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi as version 4.0. The workaround is still:</p>
8b806159078ce1308b27e676c0e8a6340f05e6e0Fabio Pistolesi <code>BrowserMatch "RealPlayer 4.0" force-response-1.0</code>
<!--#include virtual="footer.html" -->