|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Всем привет, пишу приложение состоящее из frontEnd (NuxtJS) и BackEnd (Asp Core) части. В результате работы пользователя происходит редактирование данных укрупненно представленных в виде следующей модели: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Изменение модели заключается в добавлении/удалении из массива корневых элементов ({"parentID":1...}), добавление/удаление дочерних элементов внутри родительских({"childID":"4"}). Я хочу сделать теневое сохранение результатов работы пользователя на BackEnd - по таймеру будет считываться данные с клиента и отправляться на бэкэнд для сохранения. Соответственно я столкнулся с выбором стратегии сохранения данных. 1) Каждый раз отправляем полностью объект с данными для сохранения- на бэкэнде старый стираем, поверх него записываем новый. +: простота отсутствие промежуточных состояний данных -: передача избыточных данных- они не поменялись, но все равно их сохраняем 2)На front храним предыдущую версию отправленных данных и отправляем только в том случае, если есть хоть одно отличие в сравнении с текущей +: Отбрасываем отправку дублирующих запросов -: Появляется хранение промежуточного состояния-уязвимая точка приложения, при падении которой происходит потеря последней версии данных 3)Создание на front логики, которая будет сравнивать текущее состояние данных и предыдущее сохранение и выделять конкретные группы изменений: *созданные корневые ({"parentID":1...}) записи *удаленные корневые записи *редактированные корневые записи(изменения в массиве children) на бэкэнд отправляется что-то вроде Код: javascript 1. 2. 3. 4. 5.
и на бэкэнде делается соответствующие команды для редактирования данных. +: минимально объем отправленных данных- отправляется только то, что действительно изменилось -: довольно сложная реализация много этапов, на котором что-то может пойти не так и исказит данные 4)Дублируем каждое действие на front. То есть пользователь добавил корневой элемент- отправляем http-запрос сделать аналогичную команду с данными на бэкэнде, удалил, отредактировал- аналогично. +: не нужно хранить промежуточных состояний на front несложная логика реализации -:постоянный спам беэенда мелкими запросами, необходимость для пользовательского UI ждать, пока backend вернет ответ, что запрос прошел успешно. Соответственно вопрос, возможно есть решение, которое лежит вне той плоскости, где выбирается между избыточностью отправляемых данных, простотой и минимально необходимым количеством http-запростов, но сложностью. Какие есть best-practice для подобных ситуаций именно в архитектурном плане?Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 15:10 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
vb_sub, и как часто эту вашу модель вообще редактировать будут? если один раз отредактируют и забудут на месяц, то вариант 1 вполне себе подходит ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 18:37 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
vb_sub Соответственно вопрос, возможно есть решение, которое лежит вне той плоскости, где выбирается между избыточностью отправляемых данных, простотой и минимально необходимым количеством http-запростов, но сложностью. Можете как-то по-точнее выразить задачу? Что конкретно нужно? vb_sub Какие есть best-practice для подобных ситуаций именно в архитектурном плане?Спасибо Лучшие практики применяются к задачам для достижения вполне определённых и конкретных результатов. Вы чего хотите в итоге? Ведь вы сейчас можете выбрать любой вариант реализации, который в итоге называется "как сумел", и получите соответствующий результат "так получилось". Без конкретики сложно о чём-то говорить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 01:02 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
skyANA, частота редактирования в пике-1 изменение в 3 секунды. Объем редактированной информации-1 родительский объект({"parentID":1...}) или 1 дочерний внутри какого-либо родительского("childID":"4"}). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 09:26 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
hVostt, все приведенные мной практики- компромиссные то есть улучшая какую-либо одну характеристику, приходится делать хуже другую. Если кратко о задаче- то нужно чтобы на frontend и на backend был один и тот же объект данных, но редактирование этого объекта можно осуществлять только с frontend. Сейчас рассматриваю возможность попробовать 4-й вариант, только не через http, а через webSocket соединение. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 09:37 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Сюрприз, но уэб-сокет это обёртка над хттп. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 13:55 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, но судя по бенчмаркам и тестам на размер передаваемых данных сокеты лучше подходят для частой пересылки данных малыми объемами. Ну а что сюрприз, это да, я ожидал что сокеты будут пониже уровнем, чем http. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 14:29 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
vb_sub skyANA, частота редактирования в пике-1 изменение в 3 секунды. Объем редактированной информации-1 родительский объект({"parentID":1...}) или 1 дочерний внутри какого-либо родительского("childID":"4"}). Это типа пользователь раз в месяц зашёл и тут ткнул, через 3 секунды там ткнул, ещё через 3 сям? А потом нажал "Сохранить"? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 14:37 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
skyANA, пользователю каждый день приходит список ориентировочно на 300 элементов( {"childID":"1"} ... {"childID":"300"}) и он начинает их drag-and-drop'ом растаскивать по группам({parentID:"1","children":'список элементов, содержащихся в этой группе'}). Растаскивает до тех пор, пока каждый элемент не будет в какой-либо группе и может элементы между группами перекидывать. Я хочу избавиться от кнопки "Сохранить", хочу чтобы это было автоматически. Ведь как приятно, что в Visual Studio не надо жать эту кнопку сохранения. И соответственно хочу перенести этот позитивный опыт в свое приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 15:07 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
vb_sub skyANA, пользователю каждый день приходит список ориентировочно на 300 элементов( {"childID":"1"} ... {"childID":"300"}) и он начинает их drag-and-drop'ом растаскивать по группам({parentID:"1","children":'список элементов, содержащихся в этой группе'}). Растаскивает до тех пор, пока каждый элемент не будет в какой-либо группе и может элементы между группами перекидывать. Я хочу избавиться от кнопки "Сохранить", хочу чтобы это было автоматически. Ведь как приятно, что в Visual Studio не надо жать эту кнопку сохранения. И соответственно хочу перенести этот позитивный опыт в свое приложение. Я бы запускал XMLHttpRequest при каждом дропе. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 13:51 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Сюрприз, но уэб-сокет это обёртка над хттп. vb_sub Ну а что сюрприз, это да, я ожидал что сокеты будут пониже уровнем, чем http. Websocket это не обертка над HTTP. HTTP просто позволяет переключиться на Websocket из HTTP не разрывая соединение. Как только переключение произошло то протокол больше не имеет ничего общего с HTTP, он даже уже не текстовый, а бинарный. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 13:31 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Если после HTTP заголовка начать посылать бинарные данные, то это получится уже совершенно другой протокол? Ню-ню... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 14:00 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Если после HTTP заголовка начать посылать бинарные данные, то это получится уже совершенно другой протокол? Ню-ню.. Если бы только сервер посылал данные, то еще с натяжкой можно считать что это тело HTTP ответа (хотя ответ 101 в по стандарту HTTP не должен иметь тела, т.е. это уже не HTTP). Но в вебсокете в обе стороны идут бинарные данные. Это 100% не HTTP. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 18:56 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Код: javascript 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 20:09 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Но в вебсокете в обе стороны идут бинарные данные. Это 100% не HTTP. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 20:39 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Метод POST позволяет отправить и получить бинарные данные. Это "100% не HTTP"? В вебсокете нет HTTP заголовков, нет ни POST ни GET. Он в принципе не может быть оберткой над HTTP. Если взять HTTP прокси который не знает про вебсокет, то он не сможет ретранслировать вебсокет - он вернет ошибку клиенту на первом же байте данных после переключения протокола. Что еще не понятно-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 21:24 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
а AJAX это HTTP ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 23:54 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
vb_sub skyANA, пользователю каждый день приходит список ориентировочно на 300 элементов( {"childID":"1"} ... {"childID":"300"}) и он начинает их drag-and-drop'ом растаскивать по группам({parentID:"1","children":'список элементов, содержащихся в этой группе'}). Растаскивает до тех пор, пока каждый элемент не будет в какой-либо группе и может элементы между группами перекидывать. Я хочу избавиться от кнопки "Сохранить", хочу чтобы это было автоматически. Ведь как приятно, что в Visual Studio не надо жать эту кнопку сохранения. И соответственно хочу перенести этот позитивный опыт в свое приложение. Тут подходит цепочка команд: добавить в группу такого-то родителя такой-то элемент, переместить его в группе перед таким-то элементом, после такого-то элемента. Про удалить ничего не сказано, но может тоже понадобится. Цепочку можно накапливать на клиенте и отправлять на сервер пачку команд, а можно и по одной. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 11:14 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 11:18 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 а AJAX это HTTP ? Нет. Это вообще не протокол, а API )) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 11:47 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Алексей Роза 2020 а AJAX это HTTP ? Нет. Это вообще не протокол, а API )) AJAX - это любое общение с сервером без перезагрузки страницы, организованное при помощи JavaScript. К примеру создать iframe - это самый древний способ AJAX-запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 12:01 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Но в вебсокете в обе стороны идут бинарные данные. Это 100% не HTTP. Они так делают со времён появления в HTTP протоколе запроса CONNECT. Так что это не повод уэб-сокеты объявлять чем-то принципиально новым. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 13:50 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Нет. Это вообще не протокол, а API )) у ws тоже API есть: авторОбъект WebSocket предоставляет API для создания и управления вебсокет-подключения к серверу, а также для отправки и получения данных в этом подключении. А у AJAX тоже есть свой XMLHTTPRequest... почти протокол ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 13:58 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Они так делают со времён появления в HTTP протоколе запроса CONNECT. Так что это не повод уэб-сокеты объявлять чем-то принципиально новым. Все правильно. Со времен изобретения байтов ничего принципиально нового не придумано ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 16:37 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Поэтому разбудите меня когда JS через этот ваш уэб-сокет сможет подключаться прямо к серверу IRC, не требуя чтобы кто-то для него работал как прокси. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 22:02 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Если взять HTTP прокси который не знает про вебсокет ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 04:34 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
skyANA WebSocket - протокол поверх TCP. Читайте спецификацию: https://tools.ietf.org/html/rfc6455 Странно вы как-то её читаете Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 04:36 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Поэтому разбудите меня когда JS через этот ваш уэб-сокет сможет подключаться прямо к серверу IRC, не требуя чтобы кто-то для него работал как прокси. Anatoly Moskovsky он даже уже не текстовый, а бинарный. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 07:38 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Basil A. Sidorov Метод POST позволяет отправить и получить бинарные данные. Это "100% не HTTP"? В вебсокете нет HTTP заголовков, нет ни POST ни GET. Он в принципе не может быть оберткой над HTTP. Если взять HTTP прокси который не знает про вебсокет, то он не сможет ретранслировать вебсокет - он вернет ошибку клиенту на первом же байте данных после переключения протокола. Что еще не понятно-то? https-прокси не может без злого умысла анализировать трафик, он даже запрос не видит, только адресс сайта по сути дыра в безопасности, от чего уходили с вводом http, к тому и вернулись PS: http-заголовок есть ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 08:08 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, The Upgrade header field is intended to provide a simple mechanism for transition from HTTP/1.1 to some other, incompatible protocol. Т.е. в в вашей ссылке прямо написано что это уже будет не HTTP )) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:15 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
kealon(Ruslan) спокойно проходит, главное что бы прокси поддерживал keep-alive и часто не срывался Это вы с туннелированием через CONNECT путаете. Там кстати тоже уже речь про HTTP не идет после создания туннеля. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:25 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Basil A. Sidorov skyANA WebSocket - протокол поверх TCP. Читайте спецификацию: https://tools.ietf.org/html/rfc6455 Странно вы как-то её читаете Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Я то как раз её нормально читаю, а не только до места, где про handshake. И даже досюда дочитав, можно было обратить внимание на "The protocol has two parts: a handshake and the data transfer." И подумать о том, что же там за вторая часть. И дойти таки до этого: The WebSocket Protocol is an independent TCP-based protocol. Its only relationship to HTTP is that its handshake is interpreted by HTTP servers as an Upgrade request. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:06 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Т.е. в в вашей ссылке прямо написано что это уже будет не HTTP )) Это всё, безусловно не нарушает формальную правильность вашего утверждения, но и смысла в нём не появляется. Ну а WebSocket (с третьей попытки) сделали лентяи, которым лень подумать и понять, что WS-кадрирование можно делать разными способами и что разработка нового протокола - не самый лучший вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:32 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
skyANA Я то как раз её нормально читаю, а не только до места, где про handshake. Если описывается инициализация протокола поверх HTTP, то это ещё не означает, что описываемый протокол будет работать поверх TCP. HTTP, если что, требует только "clear 8-bit channel". Over-TCP, Over-Serial или over-Ethernet - дело десятое. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:37 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Basil A. Sidorov skyANA Я то как раз её нормально читаю, а не только до места, где про handshake. Если описывается инициализация протокола поверх HTTP, то это ещё не означает, что описываемый протокол будет работать поверх TCP. HTTP, если что, требует только "clear 8-bit channel". Over-TCP, Over-Serial или over-Ethernet - дело десятое. Все начинается так же как в обычном HTTP-запросе. Браузер подключается по протоколу TCP на 80 порт сервера и дает немного необычный GET-запрос: Код: sql 1. 2. 3. 4. 5.
Если сервер поддерживает ВебСокеты, то он отвечает таким образом: Код: sql 1. 2. 3. 4. 5.
Если браузер это устраивает, то он просто оставляет TCP-соединение открытым . Все - «рукопожатие» совершено, канал обмена данными готов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:54 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Это всё, безусловно не нарушает формальную правильность вашего утверждения, но и смысла в нём не появляется. Смысла там намного больше чем в утверждении что вебсокет работает поверх хттп, которое вы сами же и опровергли )) Basil A. Sidorov Ну а WebSocket (с третьей попытки) сделали лентяи, которым лень подумать и понять, что WS-кадрирование можно делать разными способами и что разработка нового протокола - не самый лучший вариант. В HTTP невозможно реализовать p2p протокол такой как вебсокет. Подумайте сами почему. Уверен, что вы найдете ответ в спеке, как и на предыдущий вопрос )) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:14 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky kealon(Ruslan) спокойно проходит, главное что бы прокси поддерживал keep-alive и часто не срывался Это вы с туннелированием через CONNECT путаете. Там кстати тоже уже речь про HTTP не идет после создания туннеля. htеps-прокси НЕ СЛЕДИТ ЗА ТЕМ КТО И ЧТО ОТПРАВЛЯЕТ, он просто поддерживает переброску если ему сказали что нужно держать соедение как можно возможно дольше, он это и будет делать метод Connect к этому отношения не имеет ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:59 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
kealon(Ruslan) htеps-прокси НЕ СЛЕДИТ ЗА ТЕМ КТО И ЧТО ОТПРАВЛЯЕТ, он просто поддерживает переброску если ему сказали что нужно держать соедение как можно возможно дольше, он это и будет делать Удачи, вам еще многое предстоит открыть )) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:15 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, вы нормально для себя поделите, о чём вы говорите прокси ничего не реализует кроме авторизации и проксирования обычный древний IIS который, с отключенным CONNECT, свободно тунелит WebSocket вообще о нём ничего не зная - это 7 лет назад я спокойно делал а в веб-сервер естественно надо функционал такой добавлять, сам он не появится ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:38 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
kealon(Ruslan) обычный древний IIS который, с отключенным CONNECT, свободно тунелит WebSocket вообще о нём ничего не зная - это 7 лет назад я спокойно делал Потому что большинство прокси умеют переключаться с HTTP на двусторонний бинарный релей при нарушении протокола. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:58 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
skyANA Браузер подключается по протоколу TCP на 80 порт сервера и дает немного необычный GET-запрос: Что в нём необычного? HTTP спецификация ЕМНИП допускает в запросе (и ответе) заголовки, не описанные в ней, а сам GET там абсолютно нормальный. Вся "поддержка" от браузера состоит в том, что он передаёт JS принятые данные не буферизуя и не пытаясь их парсить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 14:29 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Вся "поддержка" от браузера состоит в том, что он передаёт JS принятые данные не буферизуя и не пытаясь их парсить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 14:43 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky kealon(Ruslan) обычный древний IIS который, с отключенным CONNECT, свободно тунелит WebSocket вообще о нём ничего не зная - это 7 лет назад я спокойно делал Потому что большинство прокси умеют переключаться с HTTP на двусторонний бинарный релей при нарушении протокола. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 15:01 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
kealon(Ruslan) простой вопрос для HTTPS: какого протокола? TLS? как же он должен это сделать? HTTP. Тут два варианта (если отбросить CONNECT). 1 Прозрачный прокси, когда трафик перехватывается на пути к серверу. В этом случае после установки соединения прокси ждет HTTP запрос (по plain TCP), а клиент присылает TLS handshake, прокси видит что это не HTTP и просто устанавливает двусторонний релей по plain TCP между сервером и клиентом. Содержимое соединения ему недоступно. (С CONNECT то же самое происходит явной командой клиента.) 2 Обратный прокси, когда клиент соединяется прямо к прокси, а прокси имеет TLS сертификат сервера и обрабатывает запросы клиента от имени сервера. В этом случае клиент и прокси устанавливают TLS соединение. Прокси при этом читает и выполняет индивидуальные сообщения HTTP over TLS. В случае вебсокета клиент выполняет Upgrade в вебсокет, и если прокси не в курсе про вебсокет то после ответа сервера 101 клиент присылает бинарные данные протокола вебсокет, и в этот момент прокси переключается на двусторонний релей по TLS между сервером и клиентом. В обоих случаях прокси переключается на релей когда обнаруживает что это не протокол HTTP. Просто в первом случае прокси не может видеть трафик, а во втором может. Так что к моменту когда начинаются данные вебсокета, текущий протокол уже не HTTP. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 15:33 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
вадя этого мало? Мало, конечно. Для того чтобы написать уже упомянутый IRC клиент на JS в браузере - тот вообще не должен никак ограничивать соединение и поток, предоставляя тот же интерфейс и возможности, что и BSD сокеты. Вот тогда-то меня и разбудите. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 15:46 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov упомянутый IRC клиент на JS в браузере - ещё в самом начале появления ws было известно, что через старое ПО он не везде проходит, но wss ходит везде. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 15:57 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, 1. ну и что, это не базовая функция прокси в случае https? с чего ему её блокировать? 2. а вот это уже называется "атака посередине" и к нормальному функционированию прокси отношения не имеет ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 16:02 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
kealon(Ruslan) 2. а вот это уже называется "атака посередине" и к нормальному функционированию прокси отношения не имеет В режиме обратного прокси с TLS работает весь интернет в наше время. Слово CDN надеюсь вам знакомо? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 16:06 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
kealon(Ruslan) 1. ну и что, это не базовая функция прокси в случае https? с чего ему её блокировать? Да пожалуйста не блокируйте. Только не нужно это называть HTTP. Потому что там его нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 16:09 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov . Вот тогда-то меня и разбудите. По стандарту, сообщение IRC не может иметь длину больше 510 байтов, из которых собственно на текст приходится никак не больше 499 (по нереалистично завышенной оценке). Следовательно, отправить в одном сообщении больше 249 русских букв оказывается невозможно. Ограничение размера сообщений вызывает ещё одну неприятность: при попытке превысить установленный предел сервер обрезает сообщения. Если срез пройдёт посередине русской буквы (то есть будет передан первый её байт, но отброшен второй), то получившаяся последовательность байтов перестанет, с точки зрения UTF-8, быть правильной строкой. кода в ws нет ограничения ни в длине , ни в типе передаваемых данных. так что спи - и не лезь в современную реальность. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 16:20 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov skyANA Браузер подключается по протоколу TCP на 80 порт сервера и дает немного необычный GET-запрос: Что в нём необычного? До конца прочитать сообщение не судьба? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 17:08 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
вадя По стандарту, сообщение IRC не может иметь длину больше 510 байтов, из которых собственно на текст приходится никак не больше 499 (по нереалистично завышенной оценке). Следовательно, отправить в одном сообщении больше 249 русских букв оказывается невозможно. с пробелами и ASCii знаками препинания ~300+ ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 18:47 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
skyANA Если сервер поддерживает ВебСокеты Но, в любом случае, работа HTTP поверх TCP определёна, а работа WS поверх TCP - нет: начальное подключение делается к HTTP-серверу. Принципиальная разница в том, что для WS-over-TCP требуется поддержка WS-протокола не только для целевого сервера, но и для промежуточных узлов, а вот WS-over-HTTP - прозрачно работает поверх уже существующей HTTP/1.1-инфраструктуры. И развёртывать его можно "точечно" - только на конечных узлах. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 20:02 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky В HTTP невозможно реализовать p2p протокол такой как вебсокет. Подумайте сами почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 20:05 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
работа через HTTP подразумевает отправку хедеров серверу, чего ws делает только для рукопожатия, а потом работает сам, просто используя канал, чтобы из бекенда напрямую в JS клиенту передать данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 20:06 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky 1 Прозрачный прокси, когда трафик перехватывается на пути к серверу. В этом случае после установки соединения прокси ждет HTTP запрос (по plain TCP), а клиент присылает TLS handshake, прокси видит что это не HTTP и просто устанавливает двусторонний релей по plain TCP между сервером и клиентом. P.S. Прозрачный прокси - некоторый хак и с HTTP он слабо связан. Это даже если забыть, что прозрачное проксирование не всегда возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 20:15 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Вы, эта, спецификацию почитайте ... P.S. Прозрачный прокси - некоторый хак и с HTTP он слабо связан. Это даже если забыть, что прозрачное проксирование не всегда возможно. Я там отвечал чуваку почему у него прокси не HTTP проксировал, как он пытался мне рассказать. По делу есть что сказать? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 21:44 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky kealon(Ruslan) 2. а вот это уже называется "атака посередине" и к нормальному функционированию прокси отношения не имеет В режиме обратного прокси с TLS работает весь интернет в наше время. Слово CDN надеюсь вам знакомо? если у прокси-сервера нету "доверительных отношений" с "интересным мне сервером", то он не может легально лезть в мой трафик и либо он пропускает в соответствии со стандартом, либо обрезает на основании своих предпочтений - т.е. https просто тупо не работает ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 23:43 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
kealon(Ruslan), Ну, то есть понимания как работают CDN нет. ОК) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 23:53 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky По делу есть что сказать? "Прямое" проксирование TLS (уже давно) делается в рамках RFC2817. "Прозрачное" и "обратное" проксирование - два совершенно других режима для несколько других задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 05:40 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky kealon(Ruslan), Ну, то есть понимания как работают CDN нет. ОК) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 08:39 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Basil A. Sidorov "Прямое" проксирование TLS (уже давно) делается в рамках RFC2817. Вот этот RFC это устаревший костыль, который не применяется с тех пор как в SSL появился SNI и ALPN, т.е. оно умерло почти сразу при рождении. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 10:47 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
kealon(Ruslan) как CDN-сервер закешируют инфу с любого https-сайта Я же говорю, нет понимания. У CDN-сервера нет задачи кешировать любой сайт. Это просто кластер обратных прокси для набора конкретных доменов, и каждый из этих доменов полностью под контролем CDN (включая SSL сертификаты), пока DNS делегирует обслуживание этих доменов в эту CDN. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 10:57 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Только не нужно это называть HTTP. Потому что там его нет. Если что-то выглядит как утка, крякает как утка и ходит как утка, то это утка. Если в протоколе прикладного уровня засветился заголовок, соответствующий спецификации HTTP и обойтись без него нельзя, то это HTTP. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 13:55 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky kealon(Ruslan) как CDN-сервер закешируют инфу с любого https-сайта Я же говорю, нет понимания. У CDN-сервера нет задачи кешировать любой сайт. Это просто кластер обратных прокси для набора конкретных доменов, и каждый из этих доменов полностью под контролем CDN (включая SSL сертификаты), пока DNS делегирует обслуживание этих доменов в эту CDN. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 17:02 |
|
Стратегия синхронизации данных между frontEnd и backEnd
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Вот этот RFC это устаревший костыль, который не применяется с тех пор как в SSL появился SNI и ALPN, т.е. оно умерло почти сразу при рождении. Есть выделенный для SSL (TLS) подключений порт (443 и https-схема) и есть проблема организации виртуального хостинга для https. А есть проблема переключения с http на https или любой другой (прикладной) протокол. А у вас люди с конями на Бородинской битве. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 19:04 |
|
|
start [/forum/topic.php?all=1&fid=16&tid=1339735]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
162ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
88ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 551ms |
0 / 0 |