)]}'
{
  "commit": "6fa199b1601079d8885668258f0212c2e2dd9148",
  "tree": "bb56dd34543c41b8cc92ebf52ff4b20e33273b1c",
  "parents": [
    "b3390c8cdbe5c1872623493b3b5f30d78c167992"
  ],
  "author": {
    "name": "Maxim Dounin",
    "email": "mdounin@mdounin.ru",
    "time": "Tue Jun 07 00:07:12 2022 +0300"
  },
  "committer": {
    "name": "Maxim Dounin",
    "email": "mdounin@mdounin.ru",
    "time": "Tue Jun 07 00:07:12 2022 +0300"
  },
  "message": "Upstream: fixed X-Accel-Expires/Cache-Control/Expires handling.\n\nPreviously, if caching was disabled due to Expires in the past, nginx\nfailed to cache the response even if it was cacheable as per subsequently\nparsed Cache-Control header (ticket #964).\n\nSimilarly, if caching was disabled due to Expires in the past,\n\"Cache-Control: no-cache\" or \"Cache-Control: max-age\u003d0\", caching was not\nused if it was cacheable as per subsequently parsed X-Accel-Expires header.\n\nFix is to avoid disabling caching immediately after parsing Expires in\nthe past or Cache-Control, but rather set flags which are later checked by\nngx_http_upstream_process_headers() (and cleared by \"Cache-Control: max-age\"\nand X-Accel-Expires).\n\nAdditionally, now X-Accel-Expires does not prevent parsing of cache control\nextensions, notably stale-while-revalidate and stale-if-error.  This\nensures that order of the X-Accel-Expires and Cache-Control headers is not\nimportant.\n\nProdded by Vadim Fedorenko and Yugo Horie.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fa71949a5dd0857f3b5898264494673db50d038d",
      "old_mode": 33188,
      "old_path": "src/http/ngx_http_upstream.c",
      "new_id": "ead3715569602d95d4113f911f94ad09167f7b29",
      "new_mode": 33188,
      "new_path": "src/http/ngx_http_upstream.c"
    },
    {
      "type": "modify",
      "old_id": "28d1cfbed044d21ce70079df1e4699f0bb02d77d",
      "old_mode": 33188,
      "old_path": "src/http/ngx_http_upstream.h",
      "new_id": "9a17a03a88f6bd3c87d80023d70ed3e7dcea5790",
      "new_mode": 33188,
      "new_path": "src/http/ngx_http_upstream.h"
    }
  ]
}
