2013-09-24 78 views
0

我想使用内容类型Multipart呈现网页,但我的嗅探器日志始终显示网页上图像的多个GET请求。如何指定多部分HTML代码,以便通过1 GET请求下载

这里是我的测试代码:

<!DOCTYPE html> 
<html> 
<head> 
    <title>multipart/form-data</title> 
    <header><h2>Testing multipart/form-data</h2></header> 
    <META HTTP-EQUIV="Content-Type" CONTENT="multipart/related; charset=ISO-8859-1"/> 
</head> 
<body> 
    Text outside the &lt;form&gt; tag. 
    <form 
     enctype="multipart/form-data" 
     method="POST" 
     action="/php/showPostGet.php" > <!-- The enctype attribute can only be used if method="post". --> 

     Text inside the &lt;form&gt; tag.<br /> 
     <input type="submit" value='TEST'/><br> 
     <form enctype="multipart/text/plain"> 
      Name1: <input type="text" name="fname" value="ABC"><br> 
      Name2: <input type="text" name="lname" value="123"><br> 
     </form> 
     <br /> 
     <img src="/images/arrow_left.jpg" alt="left"> 
     <img src="/images/arrow_right.jpg" alt="right"> 
     <img src="/images/arrow_up.jpg" alt="up"> 
     <img src="/images/arrow_down.jpg" alt="down"> 
     <br/> 
    </form> 
</body> 
<br/> 
</html> 

当我做了刷新该网页上,我希望看到一个GET请求,但我看到多个GET请求(一个用于主网页和一个为一个图像文件)。 这样的:

7 10.738337 163.64.287.173   10.235.5.146   HTTP  GET /mdg/HTML/FileUpload/Andy/multipart-form-data.html HTTP/1.1 

9 10.739553 10.235.5.146   163.64.287.173   HTTP  HTTP/1.1 200 OK (text/html) 

Content-Type: text/html; charset=ISO-8859-1\r\n 

<META HTTP-EQUIV="Content-Type" CONTENT="multipart/form-data; charset=ISO-8859-1"/> 

17 12.945487 163.64.287.173   10.225.57.136   HTTP  GET /images/arrow_left.jpg HTTP/1.1 

19 12.946704 10.225.57.136   163.64.287.173   HTTP  HTTP/1.1 200 OK (JPEG JFIF image) 

Content-Type: image/jpeg\r\n 

28 14.816313 163.64.287.173   10.225.57.136   HTTP  GET /images/arrow_right.jpg HTTP/1.1 

30 14.817529 10.225.57.136   163.64.287.173   HTTP  HTTP/1.1 200 OK (JPEG JFIF image) 

Content-Type: image/jpeg\r\n 

41 17.196125 163.64.287.173   10.225.57.136   HTTP  GET /images/arrow_up.jpg HTTP/1.1 

43 17.197342 10.235.5.146   163.64.287.173   HTTP  HTTP/1.1 200 OK (JPEG JFIF image) 

Content-Type: image/jpeg\r\n 

51 19.060141 163.64.287.173   10.225.57.136   HTTP  GET /images/arrow_down.jpg HTTP/1.1 

53 19.061358 10.225.57.136   163.64.287.173   HTTP  HTTP/1.1 200 OK (JPEG JFIF image) 

Content-Type: image/jpeg\r\n 

我期望看到1个get请求,随后几个OK/CONTINUATION消息(与 '边界=' 数据)。 像这样(从另一个网站):

901 15:36:40.100491 10.277.7.10 72.253.197.19 HTTP GET /app/WT/default.aspx?vtbl=1&debugds=320&vzmw3=vzmw3 HTTP/1.1

903 15:36:40.317813 72.253.197.19   10.277.7.10   HTTP  HTTP/1.1 200 OK 

Content-Type: multipart/mixed; boundary=next.part.8412f441-e4ea-4554-8400-9a003df2f78f\r\n 

Content-Type: multipart/mixed; boundary=next.part.8412f441-e4ea-4554-8400-9a003df2f78f\r\n 

MIME Multipart Media Encapsulation, Type: multipart/mixed, Boundary: "next.part.8412f441-e4ea-4554-8400-9a003df2f78f" 

First boundary: --next.part.8412f441-e4ea-4554-8400-9a003df2f78f\r\n 

Content-Type: text/html; charset=utf-8\r\n 

905 15:36:40.319315 63.64.187.229   97.253.137.46   HTTP  HTTP/1.1 200 OK 

Content-Type: multipart/mixed; boundary=next.part.8412f441-e4ea-4554-8400-9a003df2f78f\r\n 

Content-Type: multipart/mixed; boundary=next.part.8412f441-e4ea-4554-8400-9a003df2f78f\r\n 

906 15:36:40.320116 72.253.197.19   10.247.7.10   HTTP  Continuation 
+0

您如何期待它下载图像而不发送GET请求? – Barmar

+0

多部分MIME类型仅适用于电子邮件,而不适用于网页。 – Barmar

+0

这仅测试在页面加载/刷新时,multipart是否导致1个GET请求或多个GET请求。 所有桌面浏览器在加载页面时都会忽略多部分并发送几个GET请求。但是,我有一个较旧的Brew翻盖手机,并且此手机支持多部分/表单数据,所以我期望1个GET请求以及来自服务器的一个或多个连续(200)响应。 –

回答

0

You won't be able to do this in HTML. Content-Type: multipart/...是HTTP报头,而如在此定义的HTML标签<meta http-equiv="content-type">支持非常有限值:http://www.w3.org/TR/html-markup/meta.http-equiv.content-type.html#meta.http-equiv.content-type

一个特殊格式的字符串提供字符编码名称。值: 以下部分,在严格按照下列顺序:

  1. 文本字符串“text/html;”。
  2. (可选)一个或多个空格字符。
  3. 字符串“charset=”。
  4. 以下其中之一:
    • 对于HTML语法中的文档:字符编码名称。
    • 对于XML语法中的文档:字符串“UTF-8”的任何不区分大小写的匹配。

换句话说,因为这是一个HTML文件时,只允许内容类型是 “text/html的”。

您想要在服务器端的HTTP标头中指定“multipart/mixed”(例如使用PHP标头()或类似标签)。但即使如此,它似乎是支持它的唯一浏览器是Firefox/Netscape;请参阅How to download multiple files with one HTTP request?