带有附件的HTTP头文件看起来像什么(客户端到服务器文件),以及如何在.NET中解析该文件(小问题,使用RegEx和Streams等)什么形式W /文件输入字段HTTP的请求是什么样子?
回答
上传文件一个HTML网页表单使用HTTP POST
请求和MIME multipart/form-data
内容类型,这是在HTML规范(我已经添加HTTP标头中的规格示出的示例)所定义的:
HTML4:Section 17 Forms - 17.13.4 Form content types - multipart/form-data
注意。请参阅[RFC2388]有关文件上传的更多信息,包括向后兼容性问题,“多/表单数据”等内容类型,性能问题等
之间的关系......
内容“multipart/form-data”遵循[RFC2045]中概述的所有多部分MIME数据流的规则。 “多部分/表格数据”的定义可在[IANA]注册处获取。
...
以下示例说明了“multipart/form-data”编码。假设我们有以下形式:
<FORM action="http://server.com/cgi/handle" enctype="multipart/form-data" method="post"> <P> What is your name? <INPUT type="text" name="submit-name"><BR> What files are you sending? <INPUT type="file" name="files"><BR> <INPUT type="submit" value="Send"> <INPUT type="reset"> </FORM>
如果用户在文本输入进入“拉里”,并选择文本文件“FILE1.TXT”,用户代理可能会发回如下数据:
POST /cgi/handle HTTP/1.1 Host: server.com Content-Type: multipart/form-data; boundary=AaB03x Content-Length: ... --AaB03x Content-Disposition: form-data; name="submit-name" Larry --AaB03x Content-Disposition: form-data; name="files"; filename="file1.txt" Content-Type: text/plain ... contents of file1.txt ... --AaB03x--
如果用户选择的第二(图像)文件 “file2.gif”,用户代理可能构造部分如下:
POST /cgi/handle HTTP/1.1 Host: server.com Content-Type: multipart/form-data; boundary=AaB03x Content-Length: ... --AaB03x Content-Disposition: form-data; name="submit-name" Larry --AaB03x Content-Disposition: form-data; name="files" Content-Type: multipart/mixed; boundary=BbC04y --BbC04y Content-Disposition: file; filename="file1.txt" Content-Type: text/plain ... contents of file1.txt ... --BbC04y Content-Disposition: file; filename="file2.gif" Content-Type: image/gif Content-Transfer-Encoding: binary ...contents of file2.gif... --BbC04y-- --AaB03x--
HTML5:Section 4.10 Forms - 4.10.22 Form submission - 4.10.22.7 Multipart form data
在另一方面,考虑这种形式:
<form action="/find.cgi" method=post enctype="multipart/form-data"> <input type=text name=t> <input type=search name=q> <input type=submit> </form>
由于相同的用户输入,在提交结果是完全不同的:用户代理,而不是做一个HTTP POST到在给定的URL,以作为实体主体类似下面的文字:
POST /find.cgi HTTP/1.1 Host: server.com Content-Type: multipart/form-data; boundary=----kYFrd4jNJEgCervE Content-Length: ... ------kYFrd4jNJEgCervE Content-Disposition: form-data; name="t" cats ------kYFrd4jNJEgCervE Content-Disposition: form-data; name="q" fur ------kYFrd4jNJEgCervE--
...
份的顺序必须是相同的形式的数据集中的字段的顺序。具有相同名称的多个条目必须被视为不同的字段。
注:特别地,这意味着,提交作为单个
<input type=file multiple>
元件的一部分的多个文件将导致具有它自己的字段中的每个文件; RFC 2388的(“多部分/混合”),不使用功能“的文件集”。
阅读更多细节在以下RFC如何HTTP和MIME一般的处理方式:
RFC 2045 Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies
RFC 2046 Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types
(尤其是Section 5.1 Multipart Media Type)
- 1. 什么是页面源的http请求?
- 2. FileUpload - HTTP请求的类型是什么
- 3. cURL - HTTP请求的内容是什么?
- 4. HTTPS请求是什么样的?
- 5. HTTP请求优化:什么是限制?
- 6. 什么是对HTTP范围请求
- 7. 什么是“IIS模拟HTTP请求”?
- 8. 具有多个文件的Multipart HTTP请求应该是什么样的?
- 9. 此帖子请求中的#是什么?
- 10. 为什么禁用的输入字段不会在请求正文中发送?
- 11. 什么是所需的HTTP头字段
- 12. 是什么导致Express.js记录传入的HTTP请求?
- 13. 从Windows Powershell发送HTTP请求的最佳方式是什么?
- 14. 什么是HTTP请求字符串的正确编码?
- 15. 什么是用于HTTP请求标题值的文本编码?
- 16. Ruby:发送HTTP GET请求,接收JSON输出 - 最快的方式是什么?
- 17. http请求使用文件输入
- 18. 请解释%w是什么意思
- 19. 为什么Opera调整电子邮件输入字段?
- 20. 什么是PUT请求
- 21. 我为javascript输入ajax请求的URL是什么?
- 22. 这个HTTP请求有什么问题?
- 23. 在webserver日志文件中写入请求的URL的格式是什么?
- 24. textAngular输入字段显示?为什么?
- 25. 传入TypeScript函数的输入字段的类型是什么
- 26. CGRectUnion()会是什么样子?
- 27. 什么是Linux文件命令的输出版本号字段
- 28. 什么是以网页形式输入多个子记录的最佳方式
- 29. Node.js HTTP - 请求不是预期的。这是什么?
- 30. org.apache.spark.ml.classification.LogisticRegression fit()的输入格式是什么?
了解自己:下载Fiddler,做一个文件上传。 – Evert