)]}'
{"guidelines/http.rst":[{"author":{"_account_id":12321,"name":"Ryan Brown","email":"rybrown@redhat.com","username":"ryansb"},"change_message_id":"e89d7383286096e9b5281a4d06d70a7a23e89ae9","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The following HTTP methods are defined as cacheable: HEAD, GET, and"},{"line_number":51,"context_line":"POST - [RFC 7231 section"},{"line_number":52,"context_line":"4.2.3](https://tools.ietf.org/html/rfc7231#section-4.2.3)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Requests that return a status code of any of the following are defined"},{"line_number":55,"context_line":"as cacheable: 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_62ff16ab","line":52,"updated":"2015-05-15 13:49:28.000000000","message":"Markdown link :(","commit_id":"49504952e36a67f4019a3be3f0921ef8b253f801"},{"author":{"_account_id":12321,"name":"Ryan Brown","email":"rybrown@redhat.com","username":"ryansb"},"change_message_id":"e89d7383286096e9b5281a4d06d70a7a23e89ae9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Requests that return a status code of any of the following are defined"},{"line_number":55,"context_line":"as cacheable: 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and"},{"line_number":56,"context_line":"501 [RFC 7231 section"},{"line_number":57,"context_line":"6.1](https://tools.ietf.org/html/rfc7231#section-6.1)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Most python http client libraries are extremely conservative on"},{"line_number":60,"context_line":"caching, so valid RFC caching behavior won\u0027t be exercised. However,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_821b321b","line":57,"updated":"2015-05-15 13:49:28.000000000","message":"Markdown link :(","commit_id":"49504952e36a67f4019a3be3f0921ef8b253f801"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"d2c7f5e84e9e9b8b40b76108f8844476359a04f9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"really means."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"HTTP Caching and Proxy Behavior"},{"line_number":38,"context_line":"-----------------------"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"HTTP was designed to be proxied and cached heavily. HTTP caching by"},{"line_number":41,"context_line":"both intermediary proxies, and by clients themselves, is to be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_2bd7b624","line":38,"updated":"2015-05-15 15:46:55.000000000","message":"jenkins is complaining about this line length","commit_id":"4563af52c97d49a80a8c80ae06f496f535676f23"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"8d6718ff2f872809031ee73499785f62049d57c5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"really means."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"HTTP Caching and Proxy Behavior"},{"line_number":38,"context_line":"-----------------------"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"HTTP was designed to be proxied and cached heavily. HTTP caching by"},{"line_number":41,"context_line":"both intermediary proxies, and by clients themselves, is to be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_cb038241","line":38,"in_reply_to":"7a016987_2bd7b624","updated":"2015-05-15 16:03:25.000000000","message":"Done","commit_id":"4563af52c97d49a80a8c80ae06f496f535676f23"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"15c99f9ace5135ce4022e1f6962d1f77d00f8f6d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"design point to allow HTTP to work at high scale."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"That means that anywhere in the HTTP spec that things are specified as"},{"line_number":46,"context_line":"cacheable, the server implement should assume that they are, and that"},{"line_number":47,"context_line":"it **may never see** follow up requests if it does not specify appropriate"},{"line_number":48,"context_line":"Cache-Control directives on cacheable responses."},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_5d02bf0c","line":46,"updated":"2015-05-15 14:19:01.000000000","message":"implementor or implementation?","commit_id":"4563af52c97d49a80a8c80ae06f496f535676f23"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"8d6718ff2f872809031ee73499785f62049d57c5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"design point to allow HTTP to work at high scale."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"That means that anywhere in the HTTP spec that things are specified as"},{"line_number":46,"context_line":"cacheable, the server implement should assume that they are, and that"},{"line_number":47,"context_line":"it **may never see** follow up requests if it does not specify appropriate"},{"line_number":48,"context_line":"Cache-Control directives on cacheable responses."},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_0b3cfae0","line":46,"in_reply_to":"7a016987_5d02bf0c","updated":"2015-05-15 16:03:25.000000000","message":"Done","commit_id":"4563af52c97d49a80a8c80ae06f496f535676f23"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"a40d174d741061baf36d2d62e5428b132d570178","unresolved":false,"context_lines":[{"line_number":61,"context_line":"assuming \"it works in the python toolchain\" does not mean that it will"},{"line_number":62,"context_line":"in all cases. Especially with the coming support for CORS to allow"},{"line_number":63,"context_line":"native in browser javascript clients to our APIs the cache semantics"},{"line_number":64,"context_line":"will change dramatically."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"HTTP Response Codes"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_2b30d69d","line":64,"updated":"2015-05-15 15:45:46.000000000","message":"i feel like there is a word missing from this last sentence. also, should it be \"in-browser\" ?","commit_id":"4563af52c97d49a80a8c80ae06f496f535676f23"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"8d6718ff2f872809031ee73499785f62049d57c5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"assuming \"it works in the python toolchain\" does not mean that it will"},{"line_number":62,"context_line":"in all cases. Especially with the coming support for CORS to allow"},{"line_number":63,"context_line":"native in browser javascript clients to our APIs the cache semantics"},{"line_number":64,"context_line":"will change dramatically."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"HTTP Response Codes"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_8eba3822","line":64,"in_reply_to":"7a016987_2b30d69d","updated":"2015-05-15 16:03:25.000000000","message":"ok, attempted reword here.","commit_id":"4563af52c97d49a80a8c80ae06f496f535676f23"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"89c8366b1aebd80ea51a652ed308d97171e58aa5","unresolved":false,"context_lines":[{"line_number":73,"context_line":"toolchain\" does not mean that it will in all cases, or is the only way"},{"line_number":74,"context_line":"to implement the HTTP. We expect that in-browser javascript clients"},{"line_number":75,"context_line":"will have vastly different cache semantics (that are completely valid"},{"line_number":76,"context_line":"by the RFC) than the existing python clients."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Thinking carefully about cache semantics when implementing anything"},{"line_number":79,"context_line":"in the OpenStack API is critical to the API being compatible with the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_451808d3","line":76,"updated":"2015-05-22 19:05:11.000000000","message":"I agree with everything said in this section. But there\u0027s more to say:\n\n1. It is important to note in this section that unlike what a lot of people think, requests issued over secure HTTP are also cached, so everything that is said here also applies to https.\n\n2. I think this section is doing a good job as an introduction to the potential pitfalls with caching, but there is nothing here that provides advice. I think we should take a stance and recommend adding the cache control header to all responses. My opinion is that we should recommend disabling caching completely for all responses as a baseline, then projects can build from there as necessary. I guess implementation-wise a generic middleware can take care of applying a \"don\u0027t cache\" default when there is no explicit cache control in the response.","commit_id":"600af1b3c400fa7164f59a8b27c1e06d39a8c7ca"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0d1ac205eb5027a6bd7e7221c72441fb2dceb5fc","unresolved":false,"context_lines":[{"line_number":67,"context_line":"501 `RFC 7231 section 6.1"},{"line_number":68,"context_line":"\u003chttps://tools.ietf.org/html/rfc7231#section-6.1\u003e`_"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Most python http client libraries are extremely conservative on"},{"line_number":71,"context_line":"caching, so a whole class of completely valid RFC caching won\u0027t be"},{"line_number":72,"context_line":"seen when using these clients. Assuming \"it works in the python"},{"line_number":73,"context_line":"toolchain\" does not mean that it will in all cases, or is the only way"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3afb71cf_c5e114d2","line":70,"updated":"2015-06-08 17:30:20.000000000","message":"(nit) Python HTTP","commit_id":"a0291e329d9796312b9c86889e6382af7bd56801"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0d1ac205eb5027a6bd7e7221c72441fb2dceb5fc","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Most python http client libraries are extremely conservative on"},{"line_number":71,"context_line":"caching, so a whole class of completely valid RFC caching won\u0027t be"},{"line_number":72,"context_line":"seen when using these clients. Assuming \"it works in the python"},{"line_number":73,"context_line":"toolchain\" does not mean that it will in all cases, or is the only way"},{"line_number":74,"context_line":"to implement the HTTP. We expect that in-browser javascript clients"},{"line_number":75,"context_line":"will have vastly different cache semantics (that are completely valid"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3afb71cf_e505307a","line":72,"updated":"2015-06-08 17:30:20.000000000","message":"(nit) Python","commit_id":"a0291e329d9796312b9c86889e6382af7bd56801"}]}
