Я вижу, что мой Джерси + сервер причала реагирует на заголовок 100 continue, прежде чем запрос будет передан моему обработчику. Я не хочу отправлять 100-Continue и скорее отправлять ответ 3xx на основе URI/Заголовков запроса.100 Продолжайте с Jersey2 + с Jetty9 +
Это класс org.glassfish.jersey.servlet.WebComponent, который вызывает в request.getInputStream()
public Value<Integer> service(
final URI baseUri,
final URI requestUri,
final HttpServletRequest servletRequest,
final HttpServletResponse servletResponse) throws ServletException, IOException {
ContainerRequest requestContext = new ContainerRequest(baseUri, requestUri,
servletRequest.getMethod(), getSecurityContext(servletRequest), new ServletPropertiesDelegate(servletRequest));
requestContext.setEntityStream(servletRequest.getInputStream());
addRequestHeaders(servletRequest, requestContext);
и Jetty посылает 100 Продолжить заголовок, когда входной поток на запросе просят. От org.eclipse.jetty.server.Request
@Override
public ServletInputStream getInputStream() throws IOException
{
if (_inputState != __NONE && _inputState != _STREAM)
throw new IllegalStateException("READER");
_inputState = _STREAM;
if (_channel.isExpecting100Continue())
_channel.continue100(_input.available());
return _input;
}
он вызовов в HttpChannel, чтобы отправить 100 Продолжить Header
/**
* If the associated response has the Expect header set to 100 Continue,
* then accessing the input stream indicates that the handler/servlet
* is ready for the request body and thus a 100 Continue response is sent.
*
* @throws IOException if the InputStream cannot be created
*/
public void continue100(int available) throws IOException
{
// If the client is expecting 100 CONTINUE, then send it now.
// TODO: consider using an AtomicBoolean ?
if (isExpecting100Continue())
{
_expect100Continue = false;
// is content missing?
if (available == 0)
{
if (_response.isCommitted())
throw new IOException("Committed before 100 Continues");
// TODO: break this dependency with HttpGenerator
boolean committed = sendResponse(HttpGenerator.CONTINUE_100_INFO, null, false);
if (!committed)
throw new IOException("Concurrent commit while trying to send 100-Continue");
}
}
}
Как предотвратить джерси + причалом от отправки обратно 100 продолжаться до запрос достигает меток пути URI с мечеными мечами?
Согласен. Но это не отвечает на мой вопрос. Я понимаю, что это требования на уровне Jetty. Но так как метод getInputStream() вызывается Джерси до того, как код попадает в любой из моих кодов, означает ли это, что комбинация Jersey + Jetty неправильно реализует 100? –
Перечитайте вопрос. Наверное, я ответил только на половину вопроса, со стороны Jetty. Проблема заключается не в стороне Jetty, а в предположении Джерси, что ей не нужно иметь дело с альтернативной обработкой ожиданий «100-Continue». –
Вопрос только для использования Jetty + Jersey. Я понимаю, что Jetty работает сам по себе, а поддержка 100 Continue правильно реализована. Однако при использовании Jetty в качестве контейнера с Джерси он сломан. Вопрос состоял в том, чтобы сделать jersey + jetty combo для использования 100 продолжить успешно, на который здесь не ответил –