)]}'
{
  "commit": "c9190ce34eebd8a67a70e096ae771b934cbe85ac",
  "tree": "31489b3932e6aad60824b7a4cf306e66aa545e8a",
  "parents": [
    "0a11c0431f0f4c1585db1407b043b75cee881bc3"
  ],
  "author": {
    "name": "Maxim Dounin",
    "email": "mdounin@mdounin.ru",
    "time": "Sat Mar 17 23:04:26 2018 +0300"
  },
  "committer": {
    "name": "Maxim Dounin",
    "email": "mdounin@mdounin.ru",
    "time": "Sat Mar 17 23:04:26 2018 +0300"
  },
  "message": "gRPC: special handling of \"trailer only\" responses.\n\nThe gRPC protocol makes a distinction between HEADERS frame with\nthe END_STREAM flag set, and a HEADERS frame followed by an empty\nDATA frame with the END_STREAM flag.  The latter is not permitted,\nand results in errors not being propagated through nginx.  Instead,\ngRPC clients complain that \"server closed the stream without sending\ntrailers\" (seen in grpc-go) or \"13: Received RST_STREAM with error\ncode 2\" (seen in grpc-c).\n\nTo fix this, nginx now returns HEADERS with the END_STREAM flag if\nthe response length is known to be 0, and we are not expecting\nany trailer headers to be added.  And the response length is\nexplicitly set to 0 in the gRPC proxy if we see initial HEADERS frame\nwith the END_STREAM flag set.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "774f8c79bcfce402d989565cb0eca759933b0b4c",
      "old_mode": 33188,
      "old_path": "src/http/modules/ngx_http_grpc_module.c",
      "new_id": "e39be537e058ade3bef9464a2a191a50e8ae02ed",
      "new_mode": 33188,
      "new_path": "src/http/modules/ngx_http_grpc_module.c"
    },
    {
      "type": "modify",
      "old_id": "d2a5b46c5c401b83cc8aacaed1f5df9365318ce6",
      "old_mode": 33188,
      "old_path": "src/http/v2/ngx_http_v2_filter_module.c",
      "new_id": "aca80cf271005a882c76cb23d8c563310673d391",
      "new_mode": 33188,
      "new_path": "src/http/v2/ngx_http_v2_filter_module.c"
    }
  ]
}
