Перехватывать весь сетевой трафик через JavaScript

Можно ли перехватить ВЕСЬ сетевой трафик, который происходит в приложении? Идея заключалась бы в том, что каждый отдельный запрос (Ajax, iframe, щелчок привязки, отправка формы, window.location и т. д.) перехватывается, и я могу добавить к запросу собственный заголовок.

До сих пор я использовал XMLHttpRequest.prototype для захвата всех вызовов Ajax. Но это, например, не подхватывает отправку формы.

Возможно ли это в чистом JavaScript без необходимости идти и изменять каждое место, где выполняется сетевой вызов?

Нет. Вы можете довольно легко просматривать запросы AJAX, но не другие вещи. На самом деле есть логическая проблема со всей идеей: полная перезагрузка страницы (такая как window.location, отправка формы, нажатие пользователем F5 и т. д.) уничтожает текущий HTML-документ в браузере и заменяет его новым с сервера. Таким образом, любой JavaScript, работающий на этой странице, также уничтожается и заменяется. Поэтому любой код мониторинга, также работающий на JavaScript на странице, уничтожается... видите проблему?

ADyson 21.03.2019 17:51

Нет, это невозможно. Насколько мне известно, например, нет никакого способа перехватить соединения данных WebRTC. И даже если бы вы могли на прикладном уровне, на самом деле это не «сетевой трафик».

Brad 21.03.2019 17:52

В идеале код JavaScript должен выполняться еще до того, как браузер начнет обрабатывать действие.

DemCodeLines 21.03.2019 17:53

??? JavaScript запускается на странице, которая загружается в браузер... так как же он может работать до того, как браузер что-либо сделает? Может быть, вы думаете о написании расширения для браузера? Но для чего нужен этот настраиваемый заголовок? Я думаю, вместо этого вы могли бы использовать файлы cookie. Это обычный способ убедиться, что браузер прикрепляет дополнительную информацию к запросам в определенном домене.

ADyson 21.03.2019 17:54

Допустим, я нажал кнопку отправки в форме. В идеале указанная функция JavaScript должна выполняться, изменять URL-адрес, на который собирается перейти браузер, а затем возобновлять стандартное поведение. Я в основном ищу какое-то общее событие, которое запускается всеми этими действиями.

DemCodeLines 21.03.2019 17:58

вы можете изменить сам URL-адрес (например, при отправке формы), но не заголовки. И нет никакого способа сделать его общим на самом деле. Вы также не можете изменить такие вещи, как запросы, сгенерированные URL-адресами, включенными в теги <img src, или что-то в этом роде. Единственный способ, которым вы, мощь, сможете выполнить это требование, — это либо а) использовать файлы cookie вместо заголовков (конечно, сервер тоже необходимо изменить), либо использовать расширение браузера. Как я уже сказал, это немного зависит от цели этого пользовательского заголовка, которую вы не объяснили.

ADyson 21.03.2019 18:03

Можно ли использовать сервис-воркера? Взгляните на этот вопрос

James 21.03.2019 18:25

«в приложении» — я полагаю, вы имеете в виду клиентскую часть веб-приложения?

Bergi 21.03.2019 18:42

@James, насколько я знаю, до сих пор применяется только к запросам ajax. Я не думаю, что он может отслеживать запросы все на конкретной странице (или даже на отдельных страницах сайта), о чем здесь говорится.

ADyson 21.03.2019 19:33

@ADyson Я все еще с нетерпением жду возможности использовать сервисного работника, но я почти уверен, что они могут перехватывать все запросы https со страницы, на которой они зарегистрированы.

James 21.03.2019 21:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
10
959
1

Ответы 1

Кажется, вы ищете Сервисные работники.

Я изучил это, но оказалось, что любой может просто отключить их в настройках своего браузера, что лишает смысла.

DemCodeLines 21.03.2019 18:46

@DemCodeLines Каждый может отключить JavaScript в настройках своего браузера. Почему тебя это волнует? Конечно, ваша страница должна по-прежнему работать без современных функций, но какая функциональность будет потеряна, если вы не добавите настраиваемый заголовок?

Bergi 21.03.2019 19:19

Другие вопросы по теме