<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>64169</bug_id>
          
          <creation_ts>2011-07-08 07:56:09 -0700</creation_ts>
          <short_desc>[Qt] Enable Http Pipelining by default</short_desc>
          <delta_ts>2011-07-13 04:42:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>64352</dependson>
    
    <dependson>64448</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>ademar</cc>
    
    <cc>hausmann</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>markus</cc>
    
    <cc>s.mathur</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>434053</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-08 07:56:09 -0700</bug_when>
    <thetext>Http pipelining is disabled by default on QNetworkAccessManager. We need to set QNetworkRequest::HttpPipeliningAllowedAttribute on the network request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434056</commentid>
    <comment_count>1</comment_count>
      <attachid>100120</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-08 08:18:02 -0700</bug_when>
    <thetext>Created attachment 100120
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434063</commentid>
    <comment_count>2</comment_count>
      <attachid>100120</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-07-08 08:31:41 -0700</bug_when>
    <thetext>Comment on attachment 100120
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=100120&amp;action=review

r=me

&gt; Source/WebCore/ChangeLog:3
&gt; +        [Qt] Enable Http Pipelining by default

Http -&gt; HTTP

&gt; Source/WebCore/ChangeLog:8
&gt; +        QNetworkAccessManager disable HTTP pipelining by default. We enable it by

disable -&gt; disables

&gt; Source/WebCore/platform/network/qt/ResourceRequestQt.cpp:52
&gt; +    request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);

HTTP pipelining is per request? wat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434077</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-08 08:50:56 -0700</bug_when>
    <thetext>Committed r90634: &lt;http://trac.webkit.org/changeset/90634&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434093</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-08 09:05:56 -0700</bug_when>
    <thetext>Laszlo, I did not put it has a dependency for 2.2 because it probably has side effects. I think you should check with the network team before adding that a stable branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434098</commentid>
    <comment_count>5</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-07-08 09:13:36 -0700</bug_when>
    <thetext>It&apos;s OK to make this ON by default for 2.2. All of Nokia&apos;s in-the-wild mobile browsers have had this for a long time, with no ills. The tunable parameters are already OK in QtNetwork.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434127</commentid>
    <comment_count>6</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-07-08 10:18:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; It&apos;s OK to make this ON by default for 2.2. All of Nokia&apos;s in-the-wild mobile browsers have had this for a long time, with no ills. The tunable parameters are already OK in QtNetwork.

I think we should not assume that this is so simple. From http://en.wikipedia.org/wiki/HTTP_pipelining#Implementation_in_web_browsers:

&quot;&quot;&quot;
HTTP pipelining is disabled in most browsers[3].

    * Opera has pipelining enabled by default. It uses heuristics to control the level of pipelining employed depending on the connected server.[4]
    * Internet Explorer 8 does not pipeline requests, due to concerns regarding buggy proxies and head-of-line blocking.[5]
    * Mozilla browsers (such as Mozilla Firefox, SeaMonkey and Camino), support pipelining however it is disabled by default.[6][7] It uses some heuristics, especially to turn pipelining off for IIS servers.[8]
    * Konqueror 2.0 supports pipelining, but it&apos;s disabled by default.[citation needed]
    * Google Chrome does not support pipelining.[9]
&quot;&quot;&quot;

Based on that, I don&apos;t think we should enable it by default on our stable branch, specially after declaring the beta (trunk will have more time for regression tests, so it may be worth the risk).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435056</commentid>
    <comment_count>7</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-07-11 11:45:19 -0700</bug_when>
    <thetext>Removing from 2.2. Please reply to my previous comment if you disagree with the reasoning. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435598</commentid>
    <comment_count>8</comment_count>
    <who name="Markus Goetz">markus</who>
    <bug_when>2011-07-12 05:46:39 -0700</bug_when>
    <thetext>It&apos;s unfortunately not that easy.

You cannot enable pipelining for all requests because some requests might clog the socket. An example is long lives HTTP connections for HTTP polling or COMET or however you might call it.
All requests &quot;after&quot; that in the pipeline will then not be processed until the poll has finished.

So you should not enable pipelining for Ajax and general script stuff.

See for example bug 50644 ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435604</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-07-12 06:14:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; It&apos;s unfortunately not that easy.
&gt; 
&gt; You cannot enable pipelining for all requests because some requests might clog the socket. An example is long lives HTTP connections for HTTP polling or COMET or however you might call it.
&gt; All requests &quot;after&quot; that in the pipeline will then not be processed until the poll has finished.
&gt; 
&gt; So you should not enable pipelining for Ajax and general script stuff.

Fascinating. How did we not run into issues with this on the in-the-wild browsers currently using this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435605</commentid>
    <comment_count>10</comment_count>
    <who name="Markus Goetz">markus</who>
    <bug_when>2011-07-12 06:24:53 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; So you should not enable pipelining for Ajax and general script stuff.
&gt; 
&gt; Fascinating. How did we not run into issues with this on the in-the-wild browsers currently using this?

There are browsers using this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435610</commentid>
    <comment_count>11</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-07-12 06:33:10 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; So you should not enable pipelining for Ajax and general script stuff.
&gt; &gt; 
&gt; &gt; Fascinating. How did we not run into issues with this on the in-the-wild browsers currently using this?
&gt; 
&gt; There are browsers using this?

See comment #5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435611</commentid>
    <comment_count>12</comment_count>
    <who name="Markus Goetz">markus</who>
    <bug_when>2011-07-12 06:35:07 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; So you should not enable pipelining for Ajax and general script stuff.
&gt; &gt; &gt; 
&gt; &gt; &gt; Fascinating. How did we not run into issues with this on the in-the-wild browsers currently using this?
&gt; &gt; 
&gt; &gt; There are browsers using this?
&gt; 
&gt; See comment #5

That comment says nothing about if the current browsers use it for Ajax or not.
Pipelining should be done. But you should not use it for all kind of requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435614</commentid>
    <comment_count>13</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-07-12 06:37:42 -0700</bug_when>
    <thetext>I checked yesterday with RS Subramanian (Symbian HTTP and networking layer guru) and he mentioned that native Symbian browser (v7.x) uses upto 2 pipelined HTTP requests. He said that using more exposed many problems in remote web-servers as well as in the client-side HTTP/TCP stack, so a not-so-aggressive value was decided upon. 

Therefore, I suggest that we do _not_ turn on for the 2.2 branch, and let the downstream users figure it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435615</commentid>
    <comment_count>14</comment_count>
    <who name="Markus Goetz">markus</who>
    <bug_when>2011-07-12 06:45:17 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Therefore, I suggest that we do _not_ turn on for the 2.2 branch, and let the downstream users figure it out.

The plan is to have it as a default in QNetworkAccessManager at some point.
http://bugreports.qt.nokia.com/browse/QTBUG-19052

However it makes sense to decouple this from Qt&apos;s future and QtWebKit could do it therefore in trunk (but not 2.2) as soon as there&apos;s some code to have it not be done for Ajax.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100120</attachid>
            <date>2011-07-08 08:18:02 -0700</date>
            <delta_ts>2011-07-08 08:31:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64169-20110708173024.patch</filename>
            <type>text/plain</type>
            <size>1643</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2MzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkN2RiMWM3ZmNjZGMyZTFk
N2NmZDM2YzdlMDNlMjM4N2UwOWQ4ZGJlLi44MjEwZGU3N2EzNTFkM2VmNTU0MDZmNDAwMDgzNjNm
OWQ2YmY0MGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDctMDggIEJlbmph
bWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtRdF0gRW5hYmxl
IEh0dHAgUGlwZWxpbmluZyBieSBkZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NDE2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciBkaXNhYmxlIEhUVFAgcGlw
ZWxpbmluZyBieSBkZWZhdWx0LiBXZSBlbmFibGUgaXQgYnkKKyAgICAgICAgc2V0dGluZyBhbiBh
dHRyaWJ1dGUgb24gdGhlIHJlcXVlc3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0
L1Jlc291cmNlUmVxdWVzdFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dDo6dG9OZXR3b3JrUmVxdWVzdCk6CisKIDIwMTEtMDctMDggIEFsZXhhbmRlciBQYXZsb3YgIDxh
cGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBDU1MgaW5zcGVj
dG9yIGdldHMgY29uZnVzZWQgYWJvdXQgc3BlY2lmaWNpdHkgb2YgIWltcG9ydGFudCBwcm9wZXJ0
aWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291
cmNlUmVxdWVzdFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVz
b3VyY2VSZXF1ZXN0UXQuY3BwCmluZGV4IDU0YzA4ZDA1NzBhYjU4OTUwNzJkZjFlYjBkNjhjMDM1
MTJkMDgyNzkuLmRlNjBiZDE0ZDBiYjcwZGI0Njg2NWZmOTEwNjBmZDIyOTg5M2YzM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VS
ZXF1ZXN0UXQuY3BwCkBAIC00OSw2ICs0OSw3IEBAIFFOZXR3b3JrUmVxdWVzdCBSZXNvdXJjZVJl
cXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QoUU9iamVjdCogb3JpZ2luYXRpbmdGcmFtZSkgY29uCiAg
ICAgUU5ldHdvcmtSZXF1ZXN0IHJlcXVlc3Q7CiAgICAgcmVxdWVzdC5zZXRVcmwodXJsKCkpOwog
ICAgIHJlcXVlc3Quc2V0T3JpZ2luYXRpbmdPYmplY3Qob3JpZ2luYXRpbmdGcmFtZSk7CisgICAg
cmVxdWVzdC5zZXRBdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpIdHRwUGlwZWxpbmluZ0FsbG93
ZWRBdHRyaWJ1dGUsIHRydWUpOwogCiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCAmaGVhZGVycyA9
IGh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOwo=
</data>
<flag name="review"
          id="94749"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="94750"
          type_id="3"
          status="-"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>