美文网首页
form表单

form表单

作者: 高思阳 | 来源:发表于2018-10-18 13:52 被阅读0次

    form表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是"application/x-www-form-urlencoded",不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据。

    首先,客户端和服务器建立连接(TCP协议)。

    第二,客户端可以向服务器端发送数据。因为上传文件实质上也是向服务器端发送请求。

    第三,客户端按照符合“multipart/form-data”的格式向服务器端发送数据。

    这行指出这个请求是“multipart/form-data”格式的,且“boundary”是 “---------------------------7db15a14291cce”这个字符串。

    不难想象,“boundary”是用来隔开表单中不同部分数据的。例子中的表单就有 2 部分数据,用“boundary”隔开。“boundary”一般由系统随机产生,但也可以简单的用“-------------”来代替。

    实际上,每部分数据的开头都是由"--" + boundary开始,而不是由 boundary 开始。仔细看才能发现下面的开头这段字符串实际上要比 boundary 多了个 “--

    紧接着 boundary 的是该部分数据的描述。

    接下来才是数据。

    “GIF”gif格式图片的文件头,可见,unknow1.gif确实是gif格式图片。

    在请求的最后,则是 **"--" + boundary + "--" **表明表单的结束。

    需要注意的是,在html协议中,用 “/r/n” 换行,而不是 “/n”。

    https://blog.csdn.net/xiaojianpitt/article/details/6856536

    根据RFC 1867定义,我们需要选择一段数据作为“分割边界”( boundary属性),这个“边界数据”不能在内容其他地方出现,一般来说使用一段从概率上说“几乎不可能”的数据即可。 不同浏览器的实现不同,例如火狐某次post的 boundary=---------------------------32404670520626 , opera为boundary=----------E4SgDZXhJMgNE8jpwNdOAX ,每次post浏览器都会生成一个随机的30-40位长度的随机字符串,浏览器一般不会遍历这次post的所有数据找到一个不可能出现在数据中的字符串,这样代价太大了。一般都是随机生成,如果你遇见boundary值和post的内容一样,那样的话这次上传肯定失败,不过我建议你去买彩票,你太幸运了。Rfc1867这样说明{A boundary is selected that does not occur in any of the data. (This selection is sometimes done probabilisticly.)}。

    https://www.jianshu.com/p/a0e3c77d3164

    https://segmentfault.com/q/1010000007566567/a-1020000008344565

    https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects

    相关文章

      网友评论

          本文标题:form表单

          本文链接:https://www.haomeiwen.com/subject/fcojzftx.html