代码之家  ›  专栏  ›  技术社区  ›  m_vdbeek

请求前HTTP响应

  •  52
  • m_vdbeek  · 技术社区  · 13 年前

    我的问题听起来可能很愚蠢,但我只是想确定一下:

    • 是否可以在请求该资源之前发送HTTP响应?

    例如,假设您有一个HTML页面 index.html 只显示一张名为 img.jpg 。 现在,如果您的服务器知道访问者每次都会请求HTML文件和jpg图像:

    服务器是否可以在HTML文件之后立即发送图像以节省时间?

    我知道HTTP是一个同步协议,所以理论上它不应该工作,但我只是想有人确认一下(或者不确认)。

    7 回复  |  直到 13 年前
        1
  •  23
  •   Community CDub    8 年前

    最近 post by Jacques Mattheij ,引用您的问题,声称尽管HTTP是作为同步协议设计的 实施 不是。在实践中,浏览器(他没有具体说明是哪一个)接受尚未发送的请求的答案。

    另一方面,如果你想找一些不那么时髦的东西,你可以看看:

    • 允许服务器向浏览器发送内容的推送技术。取代长轮询/彗星“黑客”的现代实现是 websockets .你可能想看看 socket.io 而且
    • 或者你可能想看看 client-side routing 一些实现将其与缓存技术相结合(如 derby.js 我相信)。
        2
  •  15
  •   Dan Atkinson    11 年前

    如果有人请求/index.html,而你发送了两个响应(一个用于/index.html,另一个用于/img.jpg),你如何知道收件人会得到这两个响应,并知道在第二个请求进入之前该如何处理它们?

    问题不在于发送。问题在于接收器可能会获取意外数据。

    另一个问题是,您拒绝客户端使用HTTP缓存工具,如If Modified Since和If None Match(即客户端可能不希望发送/img.jpg,因为它已经有缓存副本)。

    也就是说,您可以使用 Comet 技术。但这比简单地预测传入的HTTP请求要复杂得多。

        3
  •  2
  •   Community CDub    8 年前

    通过有效地缓存资源,即设置 proper cache headers 以及为缓存配置web服务器。你也可以 inline images using base 64 encoding ,如果这是一个具体的问题。

    你也可以看看 long polling javascript解决方案。

        4
  •  1
  •   Femi    13 年前

    你正在寻找 server push :它在HTTP中不可用。像SPDY这样的协议有它,但如果你被限制在HTTP,那你就倒霉了。

        5
  •  1
  •   Maciek Talaska    13 年前

    我认为不可能在同一个HTTP响应中混合使用.html和image。至于“立即”发送图像数据,就在第一个请求之后-有一个“静态资源”的概念,这可能会有所帮助(但它需要客户端为特定资源创建新的请求)。

    article

        6
  •  -1
  •   Jason Fuerstenberg    13 年前

    不,这是不可能的。

    请求的第一行包含被请求的资源,因此除非您首先检查请求的字节(至少一行的值),否则您不知道该用什么来响应。

        7
  •  -2
  •   user207421    13 年前

    不是。HTTP被定义为一种请求/响应协议。一个请求:一个响应。其他任何东西都不是HTTP,而是其他东西,您必须正确地指定它,并在两端完全实现它。