代码之家  ›  专栏  ›  技术社区  ›  Diego Jancic

浏览器支持多部分响应

  •  32
  • Diego Jancic  · 技术社区  · 15 年前

    我想使用multipart/mixed创建一个HTTP响应,但是我不确定哪种浏览器支持它;如果它听起来很方便,从客户机的角度来看。 老实说,我不需要具体的内容类型。我只想在同一个响应中传输多个文件;也许还有另一种内容类型更常用。

    3 回复  |  直到 15 年前
        1
  •  28
  •   Diego Jancic    15 年前

    我用自制的服务器和简单的响应测试了它。不确定响应的格式是否正确,因为没有浏览器完全理解它。但结果如下:

    • 火狐3.5 :仅呈现最后一部分,其他部分将被忽略。
    • 工业工程8 :将所有内容显示为文本/纯文本,包括边界。
    • 铬3 :将所有内容保存在单个文件中,不呈现任何内容。
    • 狩猎4 :将所有内容保存在单个文件中,不呈现任何内容。
    • 歌剧10.10 有点奇怪。开始将第一部分呈现为纯文本,然后清除所有内容。加载进度条挂起31%。

    以下是完整的答复,如果有人发现任何错误,请告诉我,我将重试:

    HTTP/1.1 200 OK
    Date: Tue, 01 Dec 2009 23:27:30 GMT
    Vary: Accept-Encoding,User-Agent
    Content-Length: 681
    Content-Type: Multipart/mixed; boundary="sample_boundary";
    
    Multipart not supported :(
    --sample_boundary
    Content-Type: text/css; charset=utf-8
    Content-Location: http://localhost:2080/file.css
    
    body
    {
     background-color: yellow;
    }
    --sample_boundary
    Content-Type: application/x-javascript; charset=utf-8
    Content-Location: http://localhost:2080/file.js
    
    alert("Hello from a javascript!!!");
    
    --sample_boundary
    Content-Type: text/html; charset=utf-8
    Content-Base: http://localhost:2080/
    
    <html>
    <head>
        <link rel="stylesheet" href="http://localhost:2080/file.css">
    </head>
    <body>
     Hello from a html
        <script type="text/javascript" src="http://localhost:2080/file.js"></script>
    </body>
    </html>
    --sample_boundary--
    
        2
  •  4
  •   Thomas Bratt    15 年前

    根据我的经验,多部分响应在Firefox中有效,但在Internet Explorer中无效。这是2年前,使用当时的浏览器。

    我已经让HTTP多部分响应为jpeg图像流工作。例如,Axis IP摄像头用于其用于Firefox的Motion JPEG流。对于Internet Explorer,Axis需要使用插件。

    如果火狐只支持满足您的需求,那么我建议在多部分响应的每个部分设置Content-Length头。这可能有助于使原始HTTP头和多部分响应中的边界字符串相同(HTTP头中缺少“--”)。

        3
  •  3
  •   RickNZ    15 年前

    两个想法:

    1. 格式化:我认为“multipart”应该是小写的,并且我不认为在内容类型头的末尾应该有分号(尽管它可能会有什么不同,但这是有可能的)。
    2. 您尝试过替换模式吗?仅使用: Content-type: multipart/x-mixed-replace --其他一切都应该保持不变。