【问题标题】:Sending 100 Continue using Java Servlet API使用 Java Servlet API 发送 100 Continue
【发布时间】:2010-10-25 07:18:56
【问题描述】:

是否可以在使用 Java Servlet API (HttpServletResponse) 处理整个请求后发送“100 Continue”HTTP 状态代码,然后再发送一些其他状态代码?

我找不到任何明确的“否”答案,尽管 API 似乎不支持它。

【问题讨论】:

    标签: java http servlets http-status-code-100


    【解决方案1】:

    我假设您的意思是“100 继续”。

    答案是:不,你不能(至少不是它的预期方式,如provisional response)。通常,当请求需要时,servlet 引擎会自动执行此操作。当然,这使得 servlet 阻止发送 100 状态是不可能的——这个问题是 Servlet API 中的一个已知问题,并且已经被人们所熟知。

    【讨论】:

    • 感谢朱利安的回答。我想将它与 Apache Jackrabbit Webdav 库结合使用,以防止 Windows mini-redir 客户端发送无法处理的巨大 PUT 请求(因为缺少授权标头)。虽然我看到请求中没有“Expect: 100-continue”标头,但我还是想尝试一下……但我不知道如何使用 servlet 对其进行编码:-(
    • 我解决了我的问题以谈论“100 continue”,而不是 101 ;-) 现在我知道为什么在寻找“101 Continue servlet”时我在 google 上没有找到任何东西
    【解决方案2】:

    我知道Jetty will wait until getReader() or getInputStream() is called 在发送 100 之前。我认为这是您正在寻找的行为。我不知道Tomcat是做什么的。

    【讨论】:

    • 在规范的范围内,这看起来是不错的方法。很高兴知道它。谢谢。
    【解决方案3】:

    您的意思是问如何在收到完整请求之前发送状态代码,以因缺少标头字段而中断正在进行的请求?似乎这对于标准 servlet 是不可能的。

    您使用的是什么服务器?

    某些服务器的 servlet 扩展可能允许这样做,例如Tomcat's Comet servlet 可能会在标头可用于处理时发送 EventType.BEGIN,这可能允许您中断没有正确身份验证的 PUT。

    或者,您的服务器可能有一个插件来拒绝基于标头的请求。

    【讨论】:

    • "你的意思是问我如何在请求完成之前发送状态码?" ——是的,这正是我的观点。我猜 API 设计者不想仅仅为一个状态码增加更多的复杂性,所以我们可以发送它,尽管不是有意的方式。
    • 我们在 Apache HTTP Server 后面使用 Tomcat 5.5(充当反向代理)。感谢您的想法,我会检查一下。
    【解决方案4】:

    你的意思是状态码100

    API 确实支持发送 SC_CONTINUE。

    【讨论】:

    • 当您向客户端发送 100 Continue 时,您告诉客户端它可以继续发送请求正文。处理请求正文后,您需要发送另一个状态,以指示您的处理发生了什么。这基本上意味着您要为一个请求发送两种状态。
    • 我了解状态码 100 的用途(事实上,我是第一个从 101 发布更正的人)。如果您无法按预期实际使用 API,API 允许您发送它,这似乎很奇怪。
    猜你喜欢
    • 2013-10-09
    • 2013-04-27
    • 2012-12-18
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多