home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 November / CMCD1104.ISO / Software / Complet / Apache / apache_2.0.52-win32-x86-no_ssl.msi / Data.Cab / F277920_known_client_problems.xml < prev    next >
Extensible Markup Language  |  2004-04-17  |  16KB  |  388 lines

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
  3. <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
  4. <!-- $Revision: 1.1.2.6 $ -->
  5.  
  6. <!--
  7.  Copyright 2003-2004 The Apache Software Foundation
  8.  
  9.  Licensed under the Apache License, Version 2.0 (the "License");
  10.  you may not use this file except in compliance with the License.
  11.  You may obtain a copy of the License at
  12.  
  13.      http://www.apache.org/licenses/LICENSE-2.0
  14.  
  15.  Unless required by applicable law or agreed to in writing, software
  16.  distributed under the License is distributed on an "AS IS" BASIS,
  17.  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  18.  See the License for the specific language governing permissions and
  19.  limitations under the License.
  20. -->
  21.  
  22. <manualpage metafile="known_client_problems.xml.meta">
  23.   <parentdocument href="./">Miscellaneous Documentation</parentdocument>
  24.  
  25.   <title>Known Problems in Clients</title>
  26.  
  27.   <summary>
  28.  
  29.     <note type="warning"><title>Warning:</title>
  30.       <p>This document has not been fully updated
  31.       to take into account changes made in the 2.0 version of the
  32.       Apache HTTP Server. Some of the information may still be
  33.       relevant, but please use it with care.</p>
  34.     </note>
  35.  
  36.     <p>Over time the Apache Group has discovered or been notified
  37.     of problems with various clients which we have had to work
  38.     around, or explain. This document describes these problems and
  39.     the workarounds available. It's not arranged in any particular
  40.     order. Some familiarity with the standards is assumed, but not
  41.     necessary.</p>
  42.  
  43.     <p>For brevity, <em>Navigator</em> will refer to Netscape's
  44.     Navigator product (which in later versions was renamed
  45.     "Communicator" and various other names), and <em>MSIE</em> will
  46.     refer to Microsoft's Internet Explorer product. All trademarks
  47.     and copyrights belong to their respective companies. We welcome
  48.     input from the various client authors to correct
  49.     inconsistencies in this paper, or to provide us with exact
  50.     version numbers where things are broken/fixed.</p>
  51.  
  52.     <p>For reference, <a
  53.     href="ftp://ds.internic.net/rfc/rfc1945.txt">RFC1945</a>
  54.     defines HTTP/1.0, and <a
  55.     href="ftp://ds.internic.net/rfc/rfc2068.txt">RFC2068</a>
  56.     defines HTTP/1.1. Apache as of version 1.2 is an HTTP/1.1
  57.     server (with an optional HTTP/1.0 proxy).</p>
  58.  
  59.     <p>Various of these workarounds are triggered by environment
  60.     variables. The admin typically controls which are set, and for
  61.     which clients, by using <code>mod_browser</code>. Unless
  62.     otherwise noted all of these workarounds exist in versions 1.2
  63.     and later.</p>
  64.  
  65.   </summary>
  66.  
  67.   <section id="trailing-crlf"><title>Trailing CRLF on POSTs</title>
  68.  
  69.     <p>This is a legacy issue. The CERN webserver required
  70.     <code>POST</code> data to have an extra <code>CRLF</code>
  71.     following it. Thus many clients send an extra <code>CRLF</code>
  72.     that is not included in the <code>Content-Length</code> of the
  73.     request. Apache works around this problem by eating any empty
  74.     lines which appear before a request.</p>
  75.  
  76.   </section>
  77.  
  78.   <section id="broken-keepalive"><title>Broken KeepAlive</title>
  79.  
  80.     <p>Various clients have had broken implementations of
  81.     <em>keepalive</em> (persistent connections). In particular the
  82.     Windows versions of Navigator 2.0 get very confused when the
  83.     server times out an idle connection. The workaround is present
  84.     in the default config files:</p>
  85.  
  86.     <example>
  87.       BrowserMatch Mozilla/2 nokeepalive
  88.     </example>
  89.  
  90.     <p>Note that this matches some earlier versions of MSIE, which
  91.     began the practice of calling themselves <em>Mozilla</em> in
  92.     their user-agent strings just like Navigator.</p>
  93.  
  94.     <p>MSIE 4.0b2, which claims to support HTTP/1.1, does not
  95.     properly support keepalive when it is used on 301 or 302
  96.     (redirect) responses. Unfortunately Apache's
  97.     <code>nokeepalive</code> code prior to 1.2.2 would not work
  98.     with HTTP/1.1 clients. You must apply <a
  99.     href="http://www.apache.org/dist/httpd/patches/apply_to_1.2.1/msie_4_0b2_fixes.patch">
  100.     this patch</a> to version 1.2.1. Then add this to your
  101.     config:</p>
  102.  
  103.     <example>
  104.       BrowserMatch "MSIE 4\.0b2;" nokeepalive
  105.     </example>
  106.  
  107.   </section>
  108.  
  109.   <section id="force-response-1.0"><title>Incorrect interpretation of
  110.     <code>HTTP/1.1</code> in response</title>
  111.  
  112.     <p>To quote from section 3.1 of RFC1945:</p>
  113.  
  114.     <note>
  115.       HTTP uses a "<MAJOR>.<MINOR>" numbering scheme to
  116.       indicate versions of the protocol. The protocol versioning
  117.       policy is intended to allow the sender to indicate the format
  118.       of a message and its capacity for understanding further HTTP
  119.       communication, rather than the features obtained via that
  120.       communication.
  121.     </note>
  122.  
  123.     <p>Since Apache is an HTTP/1.1 server, it indicates so as part of
  124.     its response. Many client authors mistakenly treat this part of
  125.     the response as an indication of the protocol that the response
  126.     is in, and then refuse to accept the response.</p>
  127.  
  128.     <p>The first major indication of this problem was with AOL's
  129.     proxy servers. When Apache 1.2 went into beta it was the first
  130.     wide-spread HTTP/1.1 server. After some discussion, AOL fixed
  131.     their proxies. In anticipation of similar problems, the
  132.     <code>force-response-1.0</code> environment variable was added
  133.     to Apache. When present Apache will indicate "HTTP/1.0" in
  134.     response to an HTTP/1.0 client, but will not in any other way
  135.     change the response.</p>
  136.  
  137.     <p>The pre-1.1 Java Development Kit (JDK) that is used in many
  138.     clients (including Navigator 3.x and MSIE 3.x) exhibits this
  139.     problem. As do some of the early pre-releases of the 1.1 JDK.
  140.     We think it is fixed in the 1.1 JDK release. In any event the
  141.     workaround:</p>
  142.  
  143.     <example>
  144.        BrowserMatch Java/1.0 force-response-1.0<br />
  145.        BrowserMatch JDK/1.0 force-response-1.0
  146.     </example>
  147.  
  148.     <p>RealPlayer 4.0 from Progressive Networks also exhibits this
  149.     problem. However they have fixed it in version 4.01 of the
  150.     player, but version 4.01 uses the same <code>User-Agent</code>
  151.     as version 4.0. The workaround is still:</p>
  152.  
  153.     <example>
  154.       BrowserMatch "RealPlayer 4.0" force-response-1.0
  155.     </example>
  156.  
  157.   </section>
  158.  
  159.   <section id="msie4.0b2"><title>Requests use HTTP/1.1 but 
  160.                      responses must be in HTTP/1.0</title>
  161.  
  162.     <p>MSIE 4.0b2 has this problem. Its Java VM makes requests in
  163.     HTTP/1.1 format but the responses must be in HTTP/1.0 format
  164.     (in particular, it does not understand <em>chunked</em>
  165.     responses). The workaround is to fool Apache into believing the
  166.     request came in HTTP/1.0 format.</p>
  167.  
  168.     <example>
  169.       BrowserMatch "MSIE 4\.0b2;" downgrade-1.0
  170.       force-response-1.0
  171.     </example>
  172.  
  173.     <p>This workaround is available in 1.2.2, and in a <a
  174.     href="http://www.apache.org/dist/httpd/patches/apply_to_1.2.1/msie_4_0b2_fixes.patch">
  175.     patch</a> against 1.2.1.</p>
  176.  
  177.   </section>
  178.  
  179.   <section id="byte-257"><title>Boundary problems with
  180.     header parsing</title>
  181.  
  182.     <p>All versions of Navigator from 2.0 through 4.0b2 (and
  183.     possibly later) have a problem if the trailing CRLF of the
  184.     response header starts at offset 256, 257 or 258 of the
  185.     response. A BrowserMatch for this would match on nearly every
  186.     hit, so the workaround is enabled automatically on all
  187.     responses. The workaround implemented detects when this
  188.     condition would occur in a response and adds extra padding to
  189.     the header to push the trailing CRLF past offset 258 of the
  190.     response.</p>
  191.  
  192.   </section>
  193.  
  194.   <section id="boundary-string"><title>Multipart responses and 
  195.                               Quoted Boundary Strings</title>
  196.  
  197.     <p>On multipart responses some clients will not accept quotes
  198.     (") around the boundary string. The MIME standard recommends
  199.     that such quotes be used. But the clients were probably written
  200.     based on one of the examples in RFC2068, which does not include
  201.     quotes. Apache does not include quotes on its boundary strings
  202.     to workaround this problem.</p>
  203.  
  204.   </section>
  205.  
  206.   <section id="byterange-requests"><title>Byterange Requests</title>
  207.  
  208.     <p>A byterange request is used when the client wishes to
  209.     retrieve a portion of an object, not necessarily the entire
  210.     object. There was a very old draft which included these
  211.     byteranges in the URL. Old clients such as Navigator 2.0b1 and
  212.     MSIE 3.0 for the MAC exhibit this behaviour, and it will appear
  213.     in the servers' access logs as (failed) attempts to retrieve a
  214.     URL with a trailing ";xxx-yyy". Apache does not attempt to
  215.     implement this at all.</p>
  216.  
  217.     <p>A subsequent draft of this standard defines a header
  218.     <code>Request-Range</code>, and a response type
  219.     <code>multipart/x-byteranges</code>. The HTTP/1.1 standard
  220.     includes this draft with a few fixes, and it defines the header
  221.     <code>Range</code> and type
  222.     <code>multipart/byteranges</code>.</p>
  223.  
  224.     <p>Navigator (versions 2 and 3) sends both <code>Range</code>
  225.     and <code>Request-Range</code> headers (with the same value),
  226.     but does not accept a <code>multipart/byteranges</code>
  227.     response. The response must be
  228.     <code>multipart/x-byteranges</code>. As a workaround, if Apache
  229.     receives a <code>Request-Range</code> header it considers it
  230.     "higher priority" than a <code>Range</code> header and in
  231.     response uses <code>multipart/x-byteranges</code>.</p>
  232.  
  233.     <p>The Adobe Acrobat Reader plugin makes extensive use of
  234.     byteranges and prior to version 3.01 supports only the
  235.     <code>multipart/x-byterange</code> response. Unfortunately
  236.     there is no clue that it is the plugin making the request. If
  237.     the plugin is used with Navigator, the above workaround works
  238.     fine. But if the plugin is used with MSIE 3 (on Windows) the
  239.     workaround won't work because MSIE 3 doesn't give the
  240.     <code>Range-Request</code> clue that Navigator does. To
  241.     workaround this, Apache special cases "MSIE 3" in the
  242.     <code>User-Agent</code> and serves
  243.     <code>multipart/x-byteranges</code>. Note that the necessity
  244.     for this with MSIE 3 is actually due to the Acrobat plugin, not
  245.     due to the browser.</p>
  246.  
  247.     <p>Netscape Communicator appears to not issue the non-standard
  248.     <code>Request-Range</code> header. When an Acrobat plugin prior
  249.     to version 3.01 is used with it, it will not properly
  250.     understand byteranges. The user must upgrade their Acrobat
  251.     reader to 3.01.</p>
  252.  
  253.   </section>
  254.  
  255.   <section id="cookie-merge"><title><code>Set-Cookie</code> header is
  256.     unmergeable</title>
  257.  
  258.     <p>The HTTP specifications say that it is legal to merge
  259.     headers with duplicate names into one (separated by commas).
  260.     Some browsers that support Cookies don't like merged headers
  261.     and prefer that each <code>Set-Cookie</code> header is sent
  262.     separately. When parsing the headers returned by a CGI, Apache
  263.     will explicitly avoid merging any <code>Set-Cookie</code>
  264.     headers.</p>
  265.  
  266.   </section>
  267.  
  268.   <section id="gif89-expires"><title><code>Expires</code> headers 
  269.     and GIF89A animations</title>
  270.  
  271.     <p>Navigator versions 2 through 4 will erroneously re-request
  272.     GIF89A animations on each loop of the animation if the first
  273.     response included an <code>Expires</code> header. This happens
  274.     regardless of how far in the future the expiry time is set.
  275.     There is no workaround supplied with Apache, however there are
  276.     hacks for <a
  277.     href="http://www.arctic.org/~dgaudet/patches/apache-1.2-gif89-expires-hack.patch">
  278.     1.2</a> and for <a
  279.     href="http://www.arctic.org/~dgaudet/patches/apache-1.3-gif89-expires-hack.patch">
  280.     1.3</a>.</p>
  281.  
  282.   </section>
  283.  
  284.   <section id="no-content-length"><title><code>POST</code> without
  285.     <code>Content-Length</code></title>
  286.  
  287.     <p>In certain situations Navigator 3.01 through 3.03 appear to
  288.     incorrectly issue a POST without the request body. There is no
  289.     known workaround. It has been fixed in Navigator 3.04,
  290.     Netscapes provides some <a
  291.     href="http://help.netscape.com/kb/client/971014-42.html">information</a>.
  292.     There's also <a
  293.     href="http://www.arctic.org/~dgaudet/apache/no-content-length/">
  294.     some information</a> about the actual problem.</p>
  295.  
  296.   </section>
  297.  
  298.   <section id="jdk-12-bugs"><title>JDK 1.2 betas lose
  299.     parts of responses.</title>
  300.  
  301.     <p>The http client in the JDK1.2beta2 and beta3 will throw away
  302.     the first part of the response body when both the headers and
  303.     the first part of the body are sent in the same network packet
  304.     AND keep-alive's are being used. If either condition is not met
  305.     then it works fine.</p>
  306.  
  307.     <p>See also Bug-ID's 4124329 and 4125538 at the java developer
  308.     connection.</p>
  309.  
  310.     <p>If you are seeing this bug yourself, you can add the
  311.     following BrowserMatch directive to work around it:</p>
  312.  
  313.     <example>
  314.     BrowserMatch "Java1\.2beta[23]" nokeepalive
  315.     </example>
  316.  
  317.     <p>We don't advocate this though since bending over backwards
  318.     for beta software is usually not a good idea; ideally it gets
  319.     fixed, new betas or a final release comes out, and no one uses
  320.     the broken old software anymore. In theory.</p>
  321.  
  322.   </section>
  323.  
  324.   <section id="content-type-persistent"><title><code>Content-Type</code>
  325.     change is not noticed after reload</title>
  326.  
  327.     <p>Navigator (all versions?) will cache the
  328.     <code>content-type</code> for an object "forever". Using reload
  329.     or shift-reload will not cause Navigator to notice a
  330.     <code>content-type</code> change. The only work-around is for
  331.     the user to flush their caches (memory and disk). By way of an
  332.     example, some folks may be using an old <code>mime.types</code>
  333.     file which does not map <code>.htm</code> to
  334.     <code>text/html</code>, in this case Apache will default to
  335.     sending <code>text/plain</code>. If the user requests the page
  336.     and it is served as <code>text/plain</code>. After the admin
  337.     fixes the server, the user will have to flush their caches
  338.     before the object will be shown with the correct
  339.     <code>text/html</code> type.</p>
  340.  
  341.   </section>
  342.  
  343.   <section id="msie-cookie-y2k"><title>MSIE Cookie
  344.     problem with expiry date in the year 2000</title>
  345.  
  346.     <p>MSIE versions 3.00 and 3.02 (without the Y2K patch) do not
  347.     handle cookie expiry dates in the year 2000 properly. Years
  348.     after 2000 and before 2000 work fine. This is fixed in IE4.01
  349.     service pack 1, and in the Y2K patch for IE3.02. Users should
  350.     avoid using expiry dates in the year 2000.</p>
  351.  
  352.   </section>
  353.  
  354.   <section id="lynx-negotiate-trans"><title>Lynx incorrectly asking for
  355.     transparent content negotiation</title>
  356.  
  357.     <p>The Lynx browser versions 2.7 and 2.8 send a "negotiate:
  358.     trans" header in their requests, which is an indication the
  359.     browser supports transparent content negotiation (TCN). However
  360.     the browser does not support TCN. As of version 1.3.4, Apache
  361.     supports TCN, and this causes problems with these versions of
  362.     Lynx. As a workaround future versions of Apache will ignore
  363.     this header when sent by the Lynx client.</p>
  364.  
  365.   </section>
  366.  
  367.   <section id="ie40-vary"><title>MSIE 4.0 mishandles Vary
  368.     response header</title>
  369.  
  370.     <p>MSIE 4.0 does not handle a Vary header properly. The Vary
  371.     header is generated by mod_rewrite in apache 1.3. The result is
  372.     an error from MSIE saying it cannot download the requested
  373.     file. There are more details in <a
  374.     href="http://bugs.apache.org/index/full/4118">PR#4118</a>.</p>
  375.  
  376.     <p>A workaround is to add the following to your server's
  377.     configuration files:</p>
  378.  
  379.    <example>
  380.     BrowserMatch "MSIE 4\.0" force-no-vary
  381.    </example>
  382.  
  383.     <p>(This workaround is only available with releases
  384.     <strong>after</strong> 1.3.6 of the Apache Web server.)</p>
  385.  
  386.   </section>
  387. </manualpage>
  388.