Yaxy — proxy-сервер для веб-разработчика

в 5:42, , рубрики: javascript, nodejs, proxy, webdev, Веб-разработка, метки: , , ,

Yaxy — proxy-сервер, подменяющий различные части HTTP-запросов и ответов на указанные в config-файле значения. Я не буду здесь описывать, как поставить, настроить и запустить сервер, это всё описано в readme репозитория. Здесь я опишу различные случаи, в которых Yaxy очень помогает, а то и вовсе незаменим.

Замена файлу hosts

В простейшем случае у нас будут правила

    site.my => 127.0.0.1

В результате получим функциональность файла hosts с дополнительными плюшками:

  • Файл hosts кэшируется, иногда приходится несколько раз нажимать Ctrl+F5, чтобы увидеть изменения. Правила из конфига Yaxy применяются сразу после сохранения.
  • Локальность. Файл hosts влияет на всю систему, через проксю же ходят только нужные вам браузеры. Хотя в некоторых случаях это может быть недостатком.
  • А у вас есть виртуальные машины с различными браузерами в них? В каждой виртуальной машине приходится поддерживать файл hosts. А можно просто прописать всем браузерам один прокси-сервер.
  • Вы проверяете свои сайты в iPhone/iPad? Хорошо, если есть девелоперский сервер, а если нет — приходится олаживаться в продакшне. С Yaxy мы указываем в настройках прокси-сервер на нашем локальном компьютере и смотрим с телефона все локальные сайты.

Кстати, если сайт находится на нестандартном порту, необязательно писать этот порт в адресной строке браузера, можно указать его в конфиге.

    site.my => localhost:9898

Серверные ребята так долго всё делают

А мне позарез нужна поддержка HTTP-заголовока Origin на сайте, чтобы отладить свои скрипты. Не надо никого ждать.

     www.yandex.ru => $
        $SetResponseHeader Access-Control-Allow-Origin: *

Теперь на моём компьютере скрипты любого сайта смогут читать www.yandex.ru.

Тестируемся на нужных данных

У себя на сайте вы за данными ходите аяксом. Вдруг выясняется, что на определённых данных ваш скрипт падает, но воспроизвести именно такие данные штатными средствами системы не так-то просто. Да, честно говоря, и непонятно пока, какой именно должен быть JSON, чтобы всё сломалось. Можно попробовать пропатчить сервер, чтобы он на определённый урл выдавал константный JSON, а можно в конфиге прокси-сервера написать

    my-service.my/my-data.json => data:application/json;{"success":false,"error":"Большущая ошибка"}

Отлаживаем в продакшне

В JS-коде обнаружена ошибка, которая воспроизводится только в продакшне.

    my-service.ru/scripts/main.js => my-service.dev/scripts/main.js

Теперь весь сайт грузится с продакшна, а единственный скрипт main.js — с локального сайта.

Отлаживаемся на чужом сайте

Вы пишете счётчик посещаемости, или кнопки социальных сетей, или рекламную систему, или что-то ещё, что работает на чужих сайтах. Вам обязательно встретится сайт, на котором ваш код работать не будет. При этом на сайте десяток своих скриптов и ещё десяток различных информеров, и с чем конфликтует ваш скрипт — непонятно.

Что ж, сохраняем исходный код какой-нибудь страницы сайта, а в конфиг Yaxy пишем

    bad-site.ru/page.html => file:///home/me/bad-site.html

Для браузера ничего не поменялось, а вы теперь сможете исправить код страницы по своему усмотрению. А дальше стандартно — удаляем в файле различные строки и смотрим, после удаления которой пропадёт ошибка. Обнаружили, что ошибка появляется при подключении файла script.js? Подменяем его таким же образом и смотрим, что именно в нём плохого. После этого по желанию — или пишете владельцу, что код у него в таком-то месте, мягко говоря, так себе, или (что предпочтительней) адаптируете свой скрипт к подобным ситуациям.

Сайт за 30 секунд

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

    new-site.my => file://c:/www/my-site

Теперь в папке c:/www/my-site лежат файлы сайта, открывающиеся в браузере по адресу new-site.my.

Тестируем аяксовую загрузку данных

Распространённая проблема: на локалхосте всё работает быстро, кажется, что индикация загрузки не нужна. Но даже если есть понимание, что какая-то крутящаяся картинка нужна, мы её всё равно не успеваем увидеть.

    my-site.ru/data/data.json => $
        $Delay 5

Теперь файл data.json будет грузиться не менее 5 секунд.

Убираем мешающие HTTP-заголовки

Вам для тестов нужно открыть какой-то сайт в iframe, но сайт посылает заголовок X-Frame-Options: DENY. Добавляем правило

    site.ru => $
        $RemoveResponseHeader X-Frame-Options

Нет больше мешающего заголовка.

Заказ на доработку скриптов сайта

К вам обратился странный человек: он хочет, чтобы вы написали JS-скрипт для сайта, но доступ к сайту давать не хочет. А сайт достаточно сложен, скрипт нужно тестировать обязательно на нём. Нет никаких проблем. Выбираем на нужной странице сайта какой-нибудь подключенный JS-файл (например, /js/main.js), сохраняем его к себе (например в /home/me/main.js), добавляем в Yaxy правило

    site.ru/js/main.js => file:///home/me/main.js

Теперь весь сайт будет работать в обычном режиме, а файл main.js будет грузиться локально. Дописываем новый код в конец файла, потом можно будет вынести его отдельно.

А что если нужно менять вёрстку? Тоже никаких проблем. Сохраняем исходник главной страницы, добавляем правило

    !site.ru/ => file:///home/me/site.ru.html

Теперь вся главная страница сайта лежит у вас на диске, можно менять вёрстку по желанию.

Это далеко неполный перечень ситуаций, в которых меня выручает Yaxy. Буду рад, если он и вам пригодится. Ну и конечно приветствуются багрепорты.

Автор: Kolyaj

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js