Специальные заголовки

X-Delta

Заголовок используется для указания версий дельты в запросе. Значение заголовка должно содержать обозначение версий дельты. В ответе название конечной версии должно быть указано в заголовке «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 (API v0.7)

Заголовок содержит название конечной версии кеша. «Content-Version» должен всегда отправляться в ответе (не только для дельты, но и для полной таблицы), если ресурс кешируемый.

Пример использования:

> GET /api/v0.7/table/fruits

> ...

 

< HTTP/1.1 200 OK

< Content-Version: v2

< ...

Х-Data-Range

Заголовок «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

Если в запросе передан заголовок «X-Device-Id», то в случае успешной аутентификации в базе данных будет создано устройство (если оно не было создано ранее) и привязано к текущему пользователю.

CORS

Сервер мобильной платформы поддерживает обработку кросс-доменных запросов (англ. Cross-Origin Resource Sharing, CORS) для повышения безопасности системы. Для получения разрешения от сервера мобильной платформы на отправку целевого запроса с определёнными заголовками, HTTP-методами с текущего домена (Preflight-запрос) предварительно отправляется запрос методом OPTIONS.

Для обработки Preflight-запроса сервером мобильной платформы убедитесь, что в запросе содержатся заголовки:

Важно. Если в запросе не содержатся заголовки 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, If-Modified-Since, If-None-Match

Для контроля актуальности кеша ресурса разработчик может использовать заголовок «If-Match». В ответ сервер должен отдавать «Etag», где «Etag» - уникальный идентификатор, который генерируется сервером и изменяется каждый раз, когда запрашивается контент. Таким образом, «Etag» является валидатором, где явно сообщается актуальность кеша.  

Существует два распространенных варианта использования:

Для того, чтобы узнать изменен ли кеш ресурса с момента его последнего просмотра, разработчик может использовать заголовок «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).

Существует два распространенных варианта использования:

Пример использования:

Запрос Ответ

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

См. также:

API сервера | Обозначение версий дельты в запросах