)]}'
{
  "commit": "9180b48d902656b7796cdaef4f412de9e9c46353",
  "tree": "a4472f68dd62a8f30acc7df95a450e5e9515b861",
  "parents": [
    "1f4d5b5416d06f8c10c2f3fb8754702c4b060457"
  ],
  "author": {
    "name": "Valentin Bartenev",
    "email": "vbart@nginx.com",
    "time": "Tue May 24 17:37:52 2016 +0300"
  },
  "committer": {
    "name": "Valentin Bartenev",
    "email": "vbart@nginx.com",
    "time": "Tue May 24 17:37:52 2016 +0300"
  },
  "message": "HTTP/2: implemented preread buffer for request body (closes #959).\n\nPreviously, the stream\u0027s window was kept zero in order to prevent a client\nfrom sending the request body before it was requested (see 887cca40ba6a for\ndetails).  Until such initial window was acknowledged all requests with\ndata were rejected (see 0aa07850922f for details).\n\nThat approach revealed a number of problems:\n\n 1. Some clients (notably MS IE/Edge, Safari, iOS applications) show an error\n    or even crash if a stream is rejected;\n\n 2. This requires at least one RTT for every request with body before the\n    client receives window update and able to send data.\n\nTo overcome these problems the new directive \"http2_body_preread_size\" is\nintroduced.  It sets the initial window and configures a special per stream\npreread buffer that is used to save all incoming data before the body is\nrequested and processed.\n\nIf the directive\u0027s value is lower than the default initial window (65535),\nas previously, all streams with data will be rejected until the new window\nis acknowledged.  Otherwise, no special processing is used and all requests\nwith data are welcome right from the connection start.\n\nThe default value is chosen to be 64k, which is bigger than the default\ninitial window.  Setting it to zero is fully complaint to the previous\nbehavior.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "278c9abf68fd1fb19e382852b40b0a4671ac19e0",
      "old_mode": 33188,
      "old_path": "src/http/v2/ngx_http_v2.c",
      "new_id": "cd0243cfce9ee30c363f9a01db1954990bc82986",
      "new_mode": 33188,
      "new_path": "src/http/v2/ngx_http_v2.c"
    },
    {
      "type": "modify",
      "old_id": "1adf8deb92f3c0d310b1e1b6a08a033bc12fce96",
      "old_mode": 33188,
      "old_path": "src/http/v2/ngx_http_v2.h",
      "new_id": "9e738aa55749f8b6a73ce1b73fa28a38384232e5",
      "new_mode": 33188,
      "new_path": "src/http/v2/ngx_http_v2.h"
    },
    {
      "type": "modify",
      "old_id": "5a4561c2b0d09cf04aab5e0b1ad426428026f7aa",
      "old_mode": 33188,
      "old_path": "src/http/v2/ngx_http_v2_module.c",
      "new_id": "b7d99e055229de25c4a4c783e462ccde87d5e340",
      "new_mode": 33188,
      "new_path": "src/http/v2/ngx_http_v2_module.c"
    },
    {
      "type": "modify",
      "old_id": "95cc7d86fcee57dcb854626f0e781621e75795b8",
      "old_mode": 33188,
      "old_path": "src/http/v2/ngx_http_v2_module.h",
      "new_id": "91f97c2532d073e70b813ea28820bdd61aa6eada",
      "new_mode": 33188,
      "new_path": "src/http/v2/ngx_http_v2_module.h"
    }
  ]
}
