1、网络基本知识
参考链接:https://blog.csdn.net/qq_39815222/article/details/130029558
2、HTTP/1.1协议中HTTP请求方法
- OPTIONS
- GET 数据获取。
处理流程:当服务器获取请求后,首先检查请求的资源URN,然后检查请求的资源在串行闪存中是否存在,如果存在则将请求资源作为HTTP响应的一部分返回客户端;若不存在,则服务器检查请求的资源是否是ROM中内部网页文件,如果是则返回,如果不是则发送HTTP错误信息“HTTP/1.0 404 Not Found” - HEAD
- POST 更新服务器中数据。
处理流程:服务器支持内容类型为application/x-www-form-urlencoded的HTML表单,由浏览器发送的POST信息包含表单操作名和参数表,参数表包含一或多对变量名和变量值。当接收到POST请求时,首先通过表单操作名检查POST是否需要内部处理,然后检查参数表,逐个检查参数表中的变量名是否与预定义标记匹配,如果匹配则对变量值进行处理。POST操作分两种:简单操作和复杂操作。简单操作:服务器不检查操作值,只对操作表进行处理,并保存新的信息(如设置域名)。复杂操作:服务器通过操作值对操作进行识别,并收集所有必要的POST参数,然后进行特定的操作(如添加操作文件)。 - PUT
- DELETE
- TRACE
- CONNECT
3、HTTP中四种常见的POST提交数据的方式
协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
但是,数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。下面就正式开始介绍它们。例如:
//http的post数据格式
char g_cPostData[] = "POST /v1.1/device/%d/sensor/%d/datapoints HTTP\/1.1\r\n"
"Host:api.yeelink.net\r\n"
"Accept: *\/\* \r\n"
"U-ApiKey: %s \r\n"
"Content-Length: %d \r\n"
"Content-Type: application/json;charset=utf-8\r\n"
"Connection: close\r\n"
"\r\n"
"%s";
1、application/x-www-form-urlencoded
浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
2、multipart/form-data
这种方式一般用来上传文件,各大服务端语言对它也有着良好的支持。
3、application/json
用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。JSON 格式支持比键值对复杂得多的结构化数据,这一点也很有用。这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler,都会以树形结构展示 JSON 数据,非常友好。但也有些服务端语言还没有支持这种方式,例如 php 就无法通过 $_POST 对象从上面的请求中获得内容。这时候,需要自己动手处理下:在请求头中 Content-Type 为 application/json 时,从 php://input 里获得原始输入流,再 json_decode 成对象。
4、text/xml
4、charset=utf-8
charset:是数据包的一个属性,用来指定字符编码类型
utf-8:编码标准,英文字符集,包含了zhon中文的编码格式