Some API methods have the option to cache responses on the client
side by headers Etag
, Cache-Control
and Expires
.
If Etag
is returned when requesting a resource in API, for example,
the request:
GET /areas/1 HTTP/1.1
Host: api.hh.ru
User-Agent: MyApp/1.0 (my-app-feedback@example.com)
returned the answer:
HTTP/1.1 200 OK
Etag: W/"ai-356a192-57E047847BCE15-RU10e33"
Content-Type: application/json; charset=UTF-8
Content-Length: 61
Expires: Tue, 03 Oct 2017 07:01:04 GMT
Cache-Control: max-age=1200
{
"areas": [],
"id": "1",
"name": "Москва",
"parent_id": "113"
}
The client can remember the meaning of Etag
with the response data and
next time when this resource is needed, request information
about changes in the resource by sending Etag
value in the header If-None-Match
:
GET /areas/1 HTTP/1.1
Host: api.hh.ru
If-None-Match: W/"ai-356a192-57E047847BCE15-RU10e33"
User-Agent: MyApp/1.0 (my-app-feedback@example.com)
If the resource has not changed, it will return a response with a code 304 Not Modified
and without a body:
HTTP/1.1 304 Not Modified
Etag: W/"ai-356a192-57E047847BCE15-RU10e33"
Cache-Control: max-age=1200
Expires: Tue, 03 Oct 2017 07:05:43 GMT
If the resource changes, it will return new contents of the resource:
HTTP/1.1 200 OK
Etag: W/"ai-34e7018-356a192b7913b0-RU73fda"
Content-Type: application/json; charset=UTF-8
Expires: Tue, 03 Oct 2017 07:10:31 GMT
Cache-Control: max-age=1200
{
"areas": [],
"id": "1",
"name": "Москва",
"parent_id": "777"
}
The HEAD request can be used when checking by Etag
; it will work
similarly, but even if the resource has changed, it will return only
headers without a response body.
In addition, when requesting the resource, the response contains headers Cache-Control
and
Expires
for the client to cache the response and use it before the indicated expiration date.
More details in RFC-7232.
Caching is supported by the majority of directories.
You can determine support by the presence of Etag
in the response.