物流网站开题报告,自助网站建设系统,微信小程序登陆入口,网页版梦幻西游金色什么伙伴比较好在http协议中规定了GET、HEAD、POST、PUT、DELETE、CONNECT 等请求方式,其中比较常用的就是post和get#xff0c;其中post用来向服务器提交数据#xff0c;post只规定了提交的数据必须放在请求的主体中#xff0c;但是并没有规定传输数据的编码方式。比较主流的有如下的几种…在http协议中规定了GET、HEAD、POST、PUT、DELETE、CONNECT 等请求方式,其中比较常用的就是post和get其中post用来向服务器提交数据post只规定了提交的数据必须放在请求的主体中但是并没有规定传输数据的编码方式。比较主流的有如下的几种编码方式post请求。
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地表单数据会编码为 application/x-www-form-urlencoded。就是说在发送到服务器之前所有字符都会进行编码空格转换为 加号特殊符号转换为 ASCII HEX 值。
enctype属性值
Content-Type值描述application/x-www-form-urlencoded在发送前编码所有字符默认multipart/form-data 不对字符编码。 在使用包含文件上传控件的表单时必须使用该值。 text/plain空格转换为 加号但不对特殊字符编码。 Content-Type: application/x-www-form-urlencoded;charsetutf-8 1.application/x-www-form-urlencoded HTTP中默认的提交数据的方式
浏览器的原生 form表单如果不设置 enctype 属性那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样无关的请求头在本文中都省略掉了
最常见的请求方式特别是自己在测试后端接口时经常在前端url中直接以键值对的形式写入参数的值。但是该方式默认采用URLencode编码会导致消息包大form表单默认以该方式提交请求一般是如下的方式
POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charsetutf-8titletestsub%5B%5D1sub%5B%5D2sub%5B%5D3
通过抓包结果我们能得到以下结论
Content-Type 被指定为 application/x-www-form-urlencoded提交的数据按照 key1val1key2val2 的方式进行编码key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。
很多时候我们用 Ajax 提交数据时也是使用这种方式。例如 JQuery 和 QWrap 的 Ajax 默认的Content-Type 值都是「application/x-www-form-urlencoded;charsetutf-8」。
2.multipart/form-data
一个常见的 POST 数据提交的方式。我们使用表单上传文件时必须将 的 enctype设为 multipart/form-data。
注意以上两种方式application/x-www-form-urlencoded和multipart/form-data都是浏览器原生支持的。
也是比较常用的提交表单的方式既可以上传键值对也可以上传文件因为有boundary的隔离可以上传多个文件举例如下
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary----WebKitFormBoundaryrGKCBY7qhFd3TrwA------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; nametexttitle
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; namefile; filenamechrome.png
Content-Type: image/pngPNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
3.application/json
application/json作为请求头用来告诉服务端消息主体是序列化的JSON字符串除了低版本的IE基本都支持。服务端有处理JSON的函数使用不会有任何麻烦。
Google 的 AngularJS 中的 Ajax 功能默认就是application/json。
application/json 这个 Content-Type 也是非常常见的越来越多的人使用该方式传递该方式传递的是序列化后的字符串因为采用的是JSON格式的数据因此支持更多复杂的类型。
JSvar data {name:muzidigbig, age : 18};
$http.post(url, data).success(function(result) {...
});最终发送的请求是
BASHPOST http://www.example.com HTTP/1.1
Content-Type: application/json;charsetutf-8{name:muzidigbig,age:18}application/json 可以方便的提交复杂的结构化数据特别适合 RESTFul 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler都会以树形结构展示 JSON 数据非常友好。
4.text/xml
基于XML—PRC的编码方式协议简单功能页足够日常的使用JS也有类库使用但是XML的格式还是过于臃肿一般场景用JSON更为方便。典型的 XML-RPC 请求是这样的
POST http://www.example.com HTTP/1.1
Content-Type: text/xml?xml version1.0?
methodCallmethodNameexamples.getStateName/methodNameparamsparamvaluei441/i4/value/param/params
/methodCallXML-RPC 协议简单、功能够用各种语言的实现都有。它的使用也很广泛如 WordPress 的 XML-RPC Api搜索引擎的 ping 服务等等。JavaScript 中也有现成的库支持以这种方式进行数据交互能很好的支持已有的 XML-RPC 服务。不过我个人觉得 XML 结构还是过于臃肿一般场景用 JSON 会更灵活方便。