Я работаю над решением по тестированию, которое мультиплексирует несколько тестовых экземпляров за одним и тем же прокси-сервером. Решение, с которым мне поручено работать, заключается в реализации файла cookie только для HTTP, который используется для идентификации текущего идентификатора теста.
Этот файл cookie устанавливается путем перехвата трафика для различных внешних URI с уникальным путем к среде тестирования и телом JSON, содержащим идентификатор теста, а затем с набором заголовков файла cookie.
ЭтоЗатем cookie-файл идентификатора удаляется из любого исходящего трафика, чтобы не добавлять каких-либо необычных действий к серверам внешних ресурсов.
У меня есть экспресс-маршрутизатор, доступный мне, но я не могу слишком много возиться с экспресс-экземпляромсам по себе, поскольку через него будет проходить значительная часть переменного HTTP-трафика, следуя другим правилам, и хотя я могу получать запросы к локальным хостам нормально с моими первыми 2 маршрутами POST и видеть весь сетевой трафик нормально с общим последним маршрутом, третий (/proxy/tag-domain
) никогда не попал.
В настоящее время яимеют следующие маршруты:
const serverMiddleware = () => {
const router = new Router()
router.use(cookieParser())
router.use(bodyParser.json())
router.post('/proxy/register-browser', (req, res) =>
registerBrowser(req, res)
)
router.post('/proxy/register-domains', (req, res) =>
registerDomains(req, res)
)
router.post('*/proxy/tag-domain', (req, res) =>
tagDomain(req, res)
)
router.use((req, res, next) =>
proxyWeb(req, res, next)
)
return router
}
Для контекста: register-browser
, register-domains
и tag-domain
все используют одну и ту же клиентскую сторону обработчика извлечения, но register-browser
и register-domains
оба являются URI локального хоста и работаютбезупречно, извлекая данные из тела и отвечая соответствующими cookie-файлами или кодами ошибок.
Однако функция tagDomain(...)
, кажется, никогда не срабатывает, я пробовал /proxy/tag-domain
, proxy/tag-domain
, */proxy/tag-domain
и *proxy/tag-domain
.
Дальнейшее решение проблемы: я могу забрать трафик в конечном универсальном маршруте для передачи данных трафика обратно клиенту (функция proxyWeb(...)
), однакоТело запроса отображается как пустой объект - в отличие от данных JSON, полученных в конечных точках после него, отправленных тем же обработчиком на стороне клиента.
Ведение журнала также показывает, что объект testId
действительноприсутствует в запросе при запуске на стороне клиента.
Журнал клиента:
local-chrome - log -> 'registerDomains entered...'
local-chrome - log -> 'Browser is unregistered - Proceeding with Browser Registration.'
local-chrome - log -> 'Registering with Proxy...'
(1)
local-chrome - log -> 'Registering Domains:', ['https://srvr.net']
(2)
(3)
local-chrome - log -> 'Domain Registration Response: ', Object{testId: 'df87526a-0a82-5f2c-989c-4c717894576d'}
local-chrome - log -> 'Triggering Urls:', ['https://srvr.net']
(4)
local-chrome - log -> 'Sending TestID: ', '{"testId":"df87526a-0a82-5f2c-989c-4c717894576d"}'
(5)
local-chrome - error -> 'Test Level: Domain Tag Registration Failure:', TypeError: Failed to fetch
Журнал сервера:
(1)
>>> Register: http://localhost:9876/proxy/register-browser
>>> UUIDifying String: -------127.0.0.1
>>> UUIDifying String: ----local-chrome
>>> Generated UUID: 415588b4-0f9c-56f6-8b2d-0da930031443
>>> Assigning ID: 415588b4-0f9c-56f6-8b2d-0da930031443
>>> Browser Registration Reponse Sent.
(2)
>>> Browser connected with ID: 415588b4-0f9c-56f6-8b2d-0da930031443
>>> Browser UUID: 415588b4-0f9c-56f6-8b2d-0da930031443
>>> Url Array: [ 'https://srvr.net' ]
>>> Registering URLS for Test ID: df87526a-0a82-5f2c-989c-4c717894576d
>>> Known Urls: { 'srvr.net':
>>> { 'df87526a-0a82-5f2c-989c-4c717894576d': '415588b4-0f9c-56f6-8b2d-0da930031443' } }
>>> Preparing Successful Response Data...
>>> Preparing Domains Response...
>>> Domains Registration Reponse Sent.
(3)
(4)
>>> ProxyWeb handling: https://srvr.net/proxy/tag-domain
>>> with cookies: {}
>>> No testId cookie - Ignoring request...
(5)
Числа ((1)
, (2)
и т.д ...) перемежаютсячерез журналы находятся точки синхронизации, которые я добавил для ясности в этом вопросе, а не часть оригинальных журналов.
Есть ли какой-то тайный секрет маршрутизации для общих конечных точек в экспрессе, и мне нужно получитьжертвенная курица?