Form表单的主要Content-Type

  在Spa单页面横行的时代,前后端交互基本都是Json交互(也有通过FormData的,比如上传文件)。而在之前的Jsp,Php前后不分家的时候,前后交互好大一部分都是通过Form表单来完成的。From标签个属性叫 enctype,这属性指定了Form的Content-Type,可取的只有application/x-www-form-urlencoded, multipart/form-data, text/plain。

  而Content-Type包含3个部分:

  1.   media-type: 资源或数据的 MIME type (必填)
  2.   charset: 字符编码标准
  3.   boundary: 对于多部分实体,boundary 是必需的,其包括来自一组字符的1到70个字符,已知通过电子邮件网关是非常健壮的,而不是以空白结尾。它用于封装消息的多个部分的边界

  application/x-www-form-urlencoded 是Form默认的Content-Type:表单提交时编码必须遵循以下标准:

  1.   key和value都会被编码。空格被替换为‘+’,保留字编码对着参照 [RFC1738],非转义字符被替换为‘’%hh‘’的格式(一个%和两个代表示ASCII码的16进制数字),换行被替换为‘%D0%0A’(对应CR LF),都可以通过encodeURI函数转换,详细还请查阅 mdn
  2.   key和value用‘=’来分隔,每一对key和value用‘&’来分隔

  比如:

 

  multipart/form-data 是用FormData来传递数据,和上边的区别是,FormData用来传递大数据(非ascii字符和二进制数据),具体请参考另一篇文章 post使用form-data和x-www-form-urlencoded的本质区别 (这篇博客讲的感觉很详细了),编码规则如下:

  1.   包含一个Content-Disposition字段,值为form-data
  2.         一个name属行,值为对应表单key的name字段
  3.         所有的Mime传输一样,用CR LF(‘%0D%0A’)来分隔数据

  比如:划线处为规则3

 

  接下我详细说下multipart/form-data编码,假设我们有以下Form

<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>

  当用户输入‘Larry’在文本input中,还选择了一个文本文件‘file1.txt’,然后点击提交按钮,传向后台的body体为:

  Content-Type: multipart/form-data; boundary=AaB03x--AaB03xContent-Disposition: form-data; name="submit-name"Larry--AaB03xContent-Disposition: form-data; name="files"; filename="file1.txt"Content-Type: text/plain... contents of file1.txt ...--AaB03x--

  我们看到蓝色部分,就是Content-Type,参考上上边提到的,少了charset,多了个boundary(我们知道,在application/x-www-form-urlencoded 中是用‘&’来告诉服务器每一个key和value,比如一个get请求: http://localhost:8080/api?name=John&age=12 ,那么在multipart/form-data我们怎么告诉服务器呢,答案就是boundary,有了这个字段,服务器就知道一个value是从哪里开始和到哪里结束,这个字段开发者是不用写的,浏览器会自动加上,网上说我们也可以自行设置,比如你可以设置你喜欢的字符,但是我没有成功,每次都是随机的给分配一个,测试如下:)

  

  回到刚才的Form表单,如果用户选择了第二个文件‘file2.gif’,传输结构会是以下:

   Content-Type: multipart/form-data; boundary=AaB03x--AaB03xContent-Disposition: form-data; name="submit-name"Larry--AaB03xContent-Disposition: form-data; name="files"Content-Type: multipart/mixed; boundary=BbC04y--BbC04yContent-Disposition: file; filename="file1.txt"Content-Type: text/plain... contents of file1.txt ...--BbC04yContent-Disposition: file; filename="file2.gif"Content-Type: image/gifContent-Transfer-Encoding: binary...contents of file2.gif...--BbC04y----AaB03x--

  

转载于:https://www.cnblogs.com/hanshuai/p/11210803.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百慕大三角和中国娱乐界

百慕大三角神秘莫测玄机重重哥伦布在他的航海日志中记载曾经见到"拥有钢铁幕墙的巨型船只"而这些船只却来自当代的美国航运巨子一架波音747在该海域坠毁躲在洗手间的6岁小女孩是唯一的幸存者但是在两个小时之后被营救出来时她已经变成了白发苍苍的老奶奶有多少船只和…

perl子例程

2019独角兽企业重金招聘Python工程师标准>>> sub 子例程名($$)指定两个标量的参数 ($)指定一个数组 按引用调用 符号引用 typeglob 类似于UNIX文件系统中的软链接 星号(*)适用于任意类型的变量&#xff0c;包括标量&#xff0c;数组&#xff0c;散列&#xff0c;文件…

基于并查集的kruskal算法

#include <iostream> //并查集的kruskal算法using namespace std;const int max_ve1005,max_ed15005;int n,m,i; //n,m分别记录顶点数和边数struct node{int par,ans;}vertex[max_ve]; //顶点struct Edge {int u,v,weigh;}edge[max_ed]; //边int…

LeetCode—282. 给表达式添加运算符(困难)

282. 给表达式添加运算符&#xff08;困难&#xff09; 题目描述&#xff1a; 给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target &#xff0c;在 num 的数字之间添加 二元 运算符&#xff08;不是一元&#xff09;、- 或 * &#xff0c;返回 所有 能够得到 targe…

小程序 生成条形码barcode.js

1、下载barcode.js&#xff0c;新建一个文件wxbarcode.js用于计算条形码的宽高&#xff0c;以自适应不同手机屏显示 var barcode require(./barcode); function convert_length(length) {return Math.round(wx.getSystemInfoSync().windowWidth * length / 750); }function ba…

FormView在什么情况下自动生成模板项?

刚才在鼓捣GridView与FormView&#xff0c;记得前一段时间在做时&#xff0c;点击gridview中的一项会在formview中显示详细的数据&#xff0c;而在 formview中只有编写了ItemTemplate等模板才会显示&#xff0c;我清楚的记得上次我并没有手工去编写itemTemplate模板&#xff0c…

支持向量机的优缺点

原文&#xff1a;http://blog.sina.com.cn/s/blog_6d979ba00100oel2.htmlSVM有如下主要几个特点&#xff1a;(1)非线性映射是SVM方法的理论基础,SVM利用内积核函数代替向高维空间的非线性映射&#xff1b;(2)对特征空间划分的最优超平面是SVM的目标,最大化分类边际的思想是SVM方…

udp包大小选折及原因(mtu)

以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.这个1500字节被称为链路层的MTU(最大传输单元).但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区.并不包括链路层的首部和尾部的18个字节.所以,事实上,这个1500字…

Java遍历Map的几种方式

方法一&#xff1a;使用lambda表达式 Map<Integer, Integer> temp new HashMap<>(); temp.put(1,1); temp.put(2,1); temp.put(3,1); temp.forEach((k, v) -> System.out.println(v));其中&#xff0c;k是键&#xff0c;v是值 运行结果&#xff1a; 方法二&…

2019牛客暑期多校训练营(第一场) - B - Integration - 数学

https://ac.nowcoder.com/acm/contest/881/Bhttps://www.cnblogs.com/zaq19970105/p/11210030.html 试图改写多项式&#xff1a; \[\frac{1}{\prod_{i1}^{n}a_i^2x^2}\] 这个多项式用待定系数法设为&#xff1a; \[\frac{1}{\prod_{i1}^{n}a_i^2x^2}\sum_{i1}^{n}\frac{c_i}{a_…

ListBox的一个郁闷小问题!

ListBox的一个郁闷小问题&#xff01;浪费了我一个多小时&#xff01;极度郁闷。。。。。。生成的代码为这样的&#xff1a; <select name"Inc_Client_AccessManage1:ListBox1" size"5" multiple"multiple" id"Inc_Client_AccessManage1…

GNU/CPIO 学习小结

CPIO 是一种binary file archiver&#xff0c; 同时也定义了一种文件格式(file format). CPIO software utility 被作为tape archiver&#xff0c;它最初是作为PWB/UNIX(Programmers Workbech&#xff1a;1976&#xff0c; 在UNIX最开始在Bell Lab出现的时候&#xff0c;UNIX主…

Java使用数组作为Map的key

先说结论&#xff1a;Map使用数组作为key&#xff0c;存放的是其地址 我们用如下代码进行测试&#xff1a; 我们的本意是 将[‘a’,‘b’,‘c’]的字符数组存放入map且对应的value为1查询map中是否包含key为[‘a’,‘b’,‘c’]的键值对将[‘a’,‘b’,‘c’]的字符数组对应的…

[Jobdu] 题目1337:寻找最长合法括号序列

题目描述&#xff1a;给你一个长度为N的&#xff0c;由’(‘和’)’组成的括号序列&#xff0c;你能找出这个序列中最长的合法括号子序列么&#xff1f;合法括号序列的含义便是&#xff0c;在这个序列中&#xff0c;所有的左括号都有唯一的右括号匹配&#xff1b;所有的右括号都…

电脑电视兼容成科技行业新课题

随著深受网民喜爱的网络娱乐节目层出不穷&#xff0c;科技行业一个尚未解决的问题被提上日程&#xff1a;发明让用户得以在电视机上随意收看网络节目的产品。眼下&#xff0c;微软(Microsoft Corp.)、苹果电脑(Apple Computer Inc.)和英特尔(Intel Corp.)等多家行业巨头正在紧锣…

LeetCode—49. 字母异位词分组

49. 字母异位词分组 题目描述&#xff1a; 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的字母得到的一个新单词&#xff0c;所有源单词中的字母通常恰好只用一次。 考察重点&#xff1a;转为…

标准模板库(STL)学习指南之List容器

原文地址&#xff1a;http://dozb.bokee.com/1872684.html [文章导读]STL的目的是标准化组件&#xff0c;这样就不用重新开发&#xff0c;可以使用现成的组件[正文] 什么是STL呢&#xff1f;STL就是Standard Template Library&#xff0c;标准模板库。这可能是一个历史上最令人…

移动web性能优化笔记

移动web性能优化 最近看了一些文章&#xff0c;对移动web性能优化方法&#xff0c;做一个简单笔记 笔记内容主要出自 移动H5前端性能优化指南和移动前端系列——移动页面性能优化 转载于:https://www.cnblogs.com/GongQi/p/4534392.html

mysql04

连接查询 连接方式 1.交叉连接&#xff1a;交叉连接是将两个表不设定任何条件的连接结果。这种方式会产出好多个无效行。所以不用。 2.内连接 语法 select * from tb_name join tb2_name on tb_name.idtb2_name.id(注意 两个id字段的值应该是相等的&#xff09; 3.外连接 左&am…