vbondarevsky / Connector

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8
Apache License 2.0
638 stars 207 forks source link

GZip-кодирование по-умолчанию #6

Closed leemuar closed 4 years ago

leemuar commented 5 years ago

Вопрос для обсуждения

При отправке любого запроса библиотека по-умолчанию шлет заголовок Accept-Encoding: gzip, т.е. всегда запрашивает у сервера сжатые данные. Имеет ли смысл делать такое действие по-умолчанию?

В текущей версии чтобы получить несжатые данные мне как пользователю библиотеки нужно предприниматься какие-то действия (какие?). Возможно, было бы удобно сделать так, чтобы по умолчанию этот заголовок не добавлялся. Возможно, сделать доп параметр, передача которого добавит заголовок при запросе:

Результат = КоннекторHTTP.PostJson("https://httpbin.org/post",, Новый Структура("СжиматьОтвет", Истина));

П.С. Как в текущей версии отключить запрос на сжатие?

vbondarevsky commented 5 years ago

По умолчанию пользователю нужно получить данные и со сжатием это будет быстрее и экономнее для трафика. Несжатые данные нужны больше для целей отладки и т.п.

Сейчас отключить сжатие можно так

  1. Изменить поведение по умолчанию: заменить gzip на identity здесь https://github.com/vbondarevsky/Connector/blob/master/src/CommonModules/%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80HTTP/Ext/Module.bsl#L1909

  2. Переопределить заголовок

    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Accept-Encoding", "identity");
    Результат = КоннекторHTTP.GetJson("http://httpbin.org/headers",, Новый Структура("Заголовки", Заголовки));
leemuar commented 5 years ago

быстрее и экономнее для трафика

согласен, но при этом мы постоянно тратим процессорный ресурс клиента на распаковку ответа

vbondarevsky commented 5 years ago

быстрее и экономнее для трафика

согласен, но при этом мы постоянно тратим процессорный ресурс клиента на распаковку ответа

Если ответ маленький, то эти затраты незначительны. Если ответ большой, то сжатый он обработается быстрее и тем самым будут меньше затрат в целом. Ну и к тому же поведение по умолчанию очень легко изменить

leemuar commented 5 years ago

Ну и к тому же поведение по умолчанию очень легко изменить

Согласен. Я предлагаю добавить еще более простой способ изменить это поведение (повысить уровень абстракции интерфейса для управления сжатием):

ввести дополнительный параметр для управления сжатием. Например, "СжиматьОтвет". По умолчанию он будет равен "Истина". При выполнении запроса со значением "Ложь" команда (заголовок) на сжатие серверу отправляться не будет:

Результат = КоннекторHTTP.PostJson("https://httpbin.org/post",, Новый Структура("СжиматьОтвет", Ложь));

Цель изменений - повысить удобство управления сжатием. Чтобы не нужно было вспоминать какой именно заголовок нужно установить и какое значение он должен иметь, чтобы сжатие отключить

vbondarevsky commented 4 years ago

Добавил в документацию как можно отключить сжатие https://github.com/vbondarevsky/Connector#gzip-%D0%B4%D0%B5%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%82%D0%B5%D0%BB%D0%B0-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D0%B0