Заголовок используется для указания версий дельты в запросе. Значение заголовка должно содержать обозначение версий дельты. В ответе название конечной версии должно быть указано в заголовке «Content-Version». Версия в ответе должна быть указана явно, т.е. без слова last.
Пример использования (можно указывать как v0.6, так и v0.7):
> GET /api/v0.6/table/fruits
> X-Delta: v0-last
> ...
< HTTP/1.1 200 OK
< Content-Version: "delta v0-v6"
< ...
<
< [[1, "Апельсин"]]
Заголовок содержит название конечной версии кеша. «Content-Version» должен всегда отправляться в ответе (не только для дельты, но и для полной таблицы), если ресурс кешируемый.
Пример использования:
> GET /api/v0.7/table/fruits
> ...
< HTTP/1.1 200 OK
< Content-Version: v2
< ...
Заголовок «X-Range» работает так же как Range, кроме следующих моментов:
данные усекаются до архивации;
не поддерживается указание нескольких диапазонов.
Пример заголовков в запросе и ответе:
| Запрос | Ответ |
Accept-Encoding: gzip X-Range: bytes=123- If-Match: "1a2b3c" |
Content-Encoding: gzip Content-Range: bytes 123-/* ETag: "1a2b3c" Trunsfer-Encoding: chunked |
Если в запросе передан заголовок «X-Device-Id», то в случае успешной аутентификации в базе данных будет создано устройство (если оно не было создано ранее) и привязано к текущему пользователю.
Сервер мобильной платформы поддерживает обработку кросс-доменных запросов (англ. Cross-Origin Resource Sharing, CORS) для повышения безопасности системы. Для получения разрешения от сервера мобильной платформы на отправку целевого запроса с определёнными заголовками, HTTP-методами с текущего домена (Preflight-запрос) предварительно отправляется запрос методом OPTIONS.
Для обработки Preflight-запроса сервером мобильной платформы убедитесь, что в запросе содержатся заголовки:
Origin. Используется для определения источника запроса;
Access-Control-Request-Method. Используется для определения целевых HTTP-методов.
Важно. Если в запросе не содержатся заголовки Origin и Access-Control-Request-Method, то при выполнении запроса будет получен ответ с сообщением об ошибке CORS.
Для обеспечения безопасности обработки кросс-доменных запросов на сервере мобильной платформы добавьте переменную CORS_ALLOWED_ORIGIN_REGEXES и задайте список разрешённых источников запроса:
При использовании одиночной конфигурации продукта «Форсайт. Мобильная платформа» добавьте переменную в файле .env:
CORS_ALLOWED_ORIGIN_REGEXES="<полный домен сайта и/или шаблон домена>"
При использовании кластерной конфигурации продукта «Форсайт. Мобильная платформа» добавьте переменную в файле values.production.yaml:
django:
deployment:
extraEnv:
CORS_ALLOWED_ORIGIN_REGEXES: "<полный домен сайта и/или шаблон домена>"
В качестве значения переменной задайте полный домен сайта и/или шаблон домена, с которого будет отправляться запрос. Также в переменной должно содержаться значение, полученное при выполнении запроса в заголовке Origin. Несколько доменов и/или шаблонов домена задаются через пробел.
Пример переменной:
CORS_ALLOWED_ORIGIN_REGEXES="https://jj.com ^http://.*\\.mysite\\.com$"
В данном случае кросс-доменные запросы будут выполнены сервером мобильной платформы для инициаторов с различными доменами - разными значениями заголовка Origin, например:
https://jj.com
http://jj34.mysite.com
http://jj88.mysite.com
http://something.mysite.com
Для контроля актуальности кеша ресурса разработчик может использовать заголовок «If-Match». В ответ сервер должен отдавать «Etag», где «Etag» - уникальный идентификатор, который генерируется сервером и изменяется каждый раз, когда запрашивается контент. Таким образом, «Etag» является валидатором, где явно сообщается актуальность кеша.
Существует два распространенных варианта использования:
для методов GET и HEAD-методов, используемых в сочетании c RANGE, он может гарантировать, что запрашиваемые новые диапазоны с того же ресурса, что и предыдущий. Если он не соответствует, то возвращается ответ 416 (Range Not Satisfiable).
для других методов и, в частности, для PUT-методов, «If-Match» может использоваться для предотвращения проблемы с потерянным обновлением. Он может проверить, не изменит ли изменение ресурса, которое пользователь хочет загрузить, другое изменение, которое было выполнено с момента извлечения исходного ресурса. Если запрос не может быть выполнен, возвращается ответ 412 (Precondition Failed).
Для того, чтобы узнать изменен ли кеш ресурса с момента его последнего просмотра, разработчик может использовать заголовок «If-Modified-Since».
Заголовок «If-Modified-Since» делает запрос условным: сервер отправит обратно запрошенный ресурс с статусом 200, только если он был последним изменен после указанной даты. Если запрос не был изменен с тех пор, ответ будет 304. Заголовок «Last-Modified» будет содержать дату последней модификации. В отличие от «If-Unmodified-Since», «If-Modified-Since» может использоваться только с GET и HEAD-методами.
В случае, если необходимо узнать, совпадает ли кеш ресурса, то может использоваться заголовок «If-None-Match»: если ETag совпадают по результатам запроса «If-None-Match», то кеш ресурса совпадает.
Заголовок «If-None-Match» делает запрос условным: сервер отправляет обратно запрошенный ресурс с статусом 200, только если он не имеет «Etag» соответствующих данных, когда используются GET и HEAD-методы. Для других методов запрос будет обрабатываться только в том случае, если в конечном итоге существующий ресурс «Etag» не соответствует ни одному из перечисленных значений. Если условие не выполняется с GET и HEAD-методами, то сервер возвращает код статуса: 304. Если запрос не может быть выполнен, то возвращается ответ 412 (Precondition Failed).
Существует два распространенных варианта использования:
для GET и HEAD-методов, для обновления кешированного объекта, который связан с ним «ETag»;
для других методов, например, PUT-метода, если «If-None-Match» используется для сохранения неизвестного файла.
Пример использования:
| Запрос | Ответ |
If-Match: "1a2b3c" If-Modified-Since: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT If-None-Match: "737060cd8c284d8af7ad3082f209582d" |
ETag: "1a2b3c" Trunsfer-Encoding: chunked 304 Not Modified 200 OK |
См. также: