#java #http #servlets #server
#java #http #сервлеты #сервер
Вопрос:
Я создаю простой и легкий обратный HTTP-прокси и использую для него com.sun.net.httpserver.httpserver.
Как только прокси-сервер завершит свою работу, он должен добавить несколько заголовков в заголовки запроса и перенаправить запрос фактической службе, однако, когда я добавляю что-либо в заголовки запроса, я получаю исключение UnsupportedOperationException, потому что он использует неизменяемые заголовки.
Может кто-нибудь сказать мне, как настроить com.sun.net.httpserver.httpserver на использование изменяемых заголовков?
Или есть какой-либо другой, еще более легкий HTTP-сервер, который поддерживает это?
java.lang.UnsupportedOperationException: unsupported operation
at jdk.httpserver/sun.net.httpserver.UnmodifiableHeaders.add(UnmodifiableHeaders.java:65)
at com.example.SampleFilter.lambda$addValuesInRequestHeader$1(SampleFilter.java:80)
Комментарии:
1. Вы не должны использовать этот пакет для этой цели. Вы не можете написать HTTP-прокси с использованием HTTP-сервера, по крайней мере, такого, который будет работать должным образом. Вам нужно написать на уровне TCP и реализовать необходимые части HTTP самостоятельно.
2. @MarquisofLorne Итак, в настоящее время я создаю MVP и не сильно обеспокоен производительностью. я разработал его таким образом, что пользовательские фильтры находятся в отдельных модулях и могут быть повторно использованы в любом другом проекте, поэтому замена этого пакета чем-то другим не будет для меня большой проблемой в будущем. Помимо производительности, есть ли какая-либо другая причина, по которой вы предлагаете мне реализовать это на уровне TCP?
Ответ №1:
Нет способа добавлять / редактировать заголовки, но мы можем использовать методы HttpExchange.setAttribute() и HttpExchange.getAttribute() для передачи дополнительной информации при переключении между фильтрами.
Для добавления заголовков к запросу, который мы хотим переслать в службу, мы создаем новый http-запрос из исходного и включаем атрибуты в заголовки