首页 文章

JRE HttpServer是否违反了HTTP的'expect-continue'语义?

提问于
浏览
0

这是一些后续帖子problems我使用了 com.sun.net.httpserver.HttpServer 内置的Java和多步验证方案 .

我是hinted at,发送更大的数据量使得Java客户端无法接收早期的消息(由于Java阻塞I / O) .

这就是HTTP定义"expect-continue handshake"涉及100状态代码(RFC 2616)的原因:

100(继续)状态的目的是允许正在向请求主体发送请求消息的客户端在客户端发送请求之前确定源服务器是否愿意接受请求(基于请求标头)身体 . 在某些情况下,如果服务器在不查看正文的情况下拒绝邮件,则客户端发送正文可能不合适或效率极低 .

因此,在这种情况下,发送数据是不合适的 . 服务器...

必须以100(继续)状态响应并继续从输入流中读取,或使用最终状态代码进行响应 .

不幸的是,Sun HttpServer 始终以100状态代码响应而不涉及应用程序 . 看着source

/* check if client sent an Expect 100 Continue.
 * In that case, need to send an interim response.
 * In future API may be modified to allow app to
 * be involved in this process.
 */
String exp = headers.getFirst("Expect");
if (exp != null && exp.equalsIgnoreCase ("100-continue")) {
    logReply (100, requestLine, null);
    sendReply (
        Code.HTTP_CONTINUE, false, null
    );
}

当不涉及应用程序时,似乎不可能向客户端传达发送其消息是不合适的,因此违反了协议(这实际上导致了诸如早期关闭连接和管道损坏之类的问题) . 万一我错过了什么,我最好问社区这个解释是对的:)

1 回答

  • 1

    我不会说它违反了协议,因为服务器和应用程序之间的通信不是协议的一部分,只是在服务器和客户端之间进行通信 . 只要服务器在发送100-Continue后接受整个客户端请求,协议就会得到尊重 .

    当然,自动返回100-Continue意味着您将失去Expect-Continue旨在提供的潜在效率增益,但效率不是协议所保证的 .

相关问题