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