С появлением современных веб-приложений взаимодействие клиента и сервера становится все более сложным и многоуровневым. Одним из ключевых барьеров в разработке современных приложений является ограничение, связанное с политикой CORS (Cross-Origin Resource Sharing), которая ограничивает выполнение кросс-доменных запросов между браузером и сервером. Эта политика обеспечивает определенный уровень безопасности, однако создает серьезные препятствия для разработчиков, особенно при интеграции с различными API и сторонними сервисами. В такой ситуации часто используется проксирование запросов через промежуточные серверы, но классические способы обхода CORS связаны с риском утечки конфиденциальной информации, так как прокси-серверы получают доступ к содержимому передаваемых данных в открытом виде. Новое решение в этой области предлагает проект libcurl.
js - это порт популярной наработки libcurl на веб-ассемблер (WebAssembly), который предоставляет возможность отправлять зашифрованные HTTPS-запросы непосредственно из браузера с полной поддержкой сквозного шифрования между клиентом и конечным сервером. Этот инструмент кардинально меняет подход к проксированию и обеспечивает конфиденциальность передаваемой информации без необходимости полностью доверять промежуточным серверам. Libcurl.js сочетает в себе возможности проверенной временем библиотеки libcurl, использующейся во множестве приложений по всему миру, и современную технологию WebAssembly, которая позволяет запускать компилированный из C код прямо в браузере с производительностью, близкой к нативной. Такой подход обеспечивает высокую скорость обработки запросов и низкую задержку, задействуя возможности TLS 1.
3, HTTP/2, WebSocket и современных методов сжатия данных, включая Brotli и gzip. Суть решения libcurl.js заключается в том, что полноценный TLS-клиент и криптография выполняются локально в браузере. Это значит, что все данные, которые пользователь посылает через HTTPS, сначала шифруются на стороне клиента. Для передачи данных используется WebSocket-соединение с прокси-сервером.
При этом прокси не имеет доступа к содержимому запроса, он лишь перенаправляет зашифрованные данные на TCP-сокет конечного сервера. Это устраняет риск того, что прокси-сервер сможет перехватить или проанализировать передаваемую информацию, включая чувствительные данные, такие как ключи API или личные учетные записи. Основным протоколом мультиплексирования, применяемым в libcurl.js, является Wisp - легковесный, низколатентный мост для передачи TCP-потоков через единое WebSocket-соединение. Это позволяет эффективно использовать ресурсы сети и сократить задержки при множественных параллельных соединениях, что особенно важно для приложений с высокой нагрузкой и реальным временем отклика.
Libcurl.js разработан таким образом, чтобы максимально соответствовать привычному API браузера, используя совместимый с Fetch API интерфейс. Для разработчиков это означает минимальные изменения в коде и легкий переход на использование libcurl.js в существующих веб-приложениях, что ускоряет внедрение технологии. Поддержка всех основных браузеров, включая Chromium (начиная с версии 64), Firefox (с версии 65) и Safari (с версии 14), обеспечивает широкую совместимость и делает libcurl.
js доступным для большинства пользователей интернета без необходимости установки дополнительных расширений или программ. Несмотря на достаточно сложный набор технологий, общая размерность библиотеки после сжатия составляет всего около 552 КБ, что способствует быстрой загрузке и снижению потребления системных ресурсов во время работы. Практическое применение libcurl.js разнообразно и включает в себя как разработку безопасных клиентских приложений, так и построение сквозных приватных каналов коммуникации без риска вмешательства прокси-серверов. Веб-разработчики могут использовать его для организации приватного, защищенного канала обмена данными с API, даже если сервер не поддерживает CORS, без компромиссов в вопросах безопасности.
Этот проект открыт и доступен на GitHub, а также имеет пакеты в NPM, что облегчает интеграцию с современными сборщиками и пакетными менеджерами. Использование libcurl.js начинается с простой настройки через подключение скрипта или импорт из ES6-модуля, после чего можно напрямую выполнять HTTPS-запросы через API, схожий с привычным fetch. Libcurl.js особенно актуален в условиях роста требований к приватности и безопасности в интернете.
Многие проекты сталкиваются с необходимостью работы через третьи стороны или посредников, для которых нельзя предоставить полный доступ к содержимому запросов. Благодаря этой технологии, появляется возможность построения гибких архитектур, обеспечивающих не только функциональность, но и высокий уровень защиты данных. В заключение стоит отметить, что разработчик проекта либcurl.js опубликовал его под лицензией GNU LGPL v3. Это значит, что библиотеки можно свободно использовать, распространять и модифицировать, при условии сохранения свободной лицензии для самих библиотек.
При этом приложения, использующие libcurl.js, не обязаны придерживаться LGPL, что делает проект удобным выбором и для коммерческой разработки. Таким образом, libcurl.js является значимой технологической инновацией, которая способна изменить подход к обходу CORS и обеспечению безопасности в веб-разработке. Благодаря мощным возможностям WebAssembly и проверенной криптографии Mbed TLS, этот проект позволяет реализовать полноценный TLS-клиент в браузере, что открывает новые горизонты в создании безопасных и приватных веб-приложений с низкой задержкой и универсальной совместимостью.
.