Передача кодировки gzip в запросе PUT

Я создаю сервис с REST API, который дает людям возможность загружать определенные типы документов. Я хотел бы, чтобы эти документы были сжаты во время загрузки (из соображений пропускной способности), но они не хранятся в моей службе в сжатом виде. У меня есть клиентский SDK, но клиенты могут свободно реализовывать свои собственные библиотеки для загрузки контента на основе документации REST, которую я опубликовал. Я просмотрел верхний ответ здесь и определил, что кодировка передачи может быть более подходящим механизмом для этого.

Однако существует очень скудная документация / примеры включения кодирования передачи во время запроса PUT. RFC, кажется, тратит много текста на передачу закодированных ответов с сервера, но не наоборот.

Если я выберу этот путь, я хотел бы получить разъяснения по нескольким вопросам:

  1. Согласно RFC 7230, при кодировании передачи gzip всегда должен использоваться второй кодирование chunked. В моем случае это не является строго обязательным, поскольку отправитель знает полную длину отправляемого файла. Но в соответствии со стандартами я должен реализовать на сервере фрагментированное кодирование. RFC указывает, что длину содержимого не следует указывать, если указано кодирование передачи, и следует использовать кадрирование кодирования по фрагментам для определения конца сообщения. Это точно? Я спрашиваю об этом, так как мой сервис должен будет поддерживать фрагментированное кодирование, и я бы хотел по возможности избежать его разработки.
  2. Для ответов с кодировкой передачи существует механизм (TE: Transfer-Encoding :), с помощью которого сервер согласовывает с клиентом алгоритм, который он поддерживает. Но такого механизма взаимодействия клиента с сервером нет. Если по какой-то причине в будущем я захочу прекратить поддержку кодирования передачи gzip в моем сервисе, есть ли альтернатива, кроме возврата клиенту 501 (не реализованной) ошибки? Это было бы критическим изменением и могло бы привести к тому, что некоторые клиенты полностью перестанут работать. В идеале я хотел бы, чтобы клиент запрашивал, поддерживает ли сервер определенную кодировку, и только затем начал отправлять сообщения с использованием этой кодировки. Есть ли какие-нибудь интересные способы сделать это?

person user9476940    schedule 11.03.2018    source источник


Ответы (1)


gzip в качестве кодировки передачи широко не применяется (если вообще) и не существует в HTTP / 2.

Считали ли вы gzip кодировкой содержимого? См. https://greenbytes.de/tech/webdav/rfc7694.html для получения дополнительной информации. Информация.

person Julian Reschke    schedule 12.03.2018
comment
Я посмотрел на кодирование содержимого, но, похоже, это означает, что вызывающий может получить содержимое, закодированное как gzip, в запросе GET, что, как я уже упоминал, не является тем, что я хотел бы поддерживать. - person user9476940; 12.03.2018
comment
Это не обязательно подразумевает это. Тем не менее, почему это не имеет смысла? - person Julian Reschke; 12.03.2018