为什么需要协议,因为服务端和客户端通信需要统一的规则,否则无法正确获取到对方发送的信息.
没有请求协议,服务端拆不开请求的数据,
没有响应协议,浏览器拆不开响应的数据.
其实浏览器和服务端.彼此发的就是一堆字符串,只不过是有个有格式的字符串.
这个有格式的字符串就是:

请求首行(一定要有)说明GET请求,请求路径,GET发来的数据,协议类型和办法等等等等 General: Request URL: https://www.baidu.com/ Request Method: GET Status Code: 200 OK Remote Address: 111.13.100.92:443 Referrer Policy: no-referrer-when-downgrade 请求头(不一定要有.用来描述更多的请求信息,也可以自定义请求头,只要按照规定的格式例如name:alex RequestHeaders: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive Cookie: BAIDUID=BE6E148AD89670194AA8166CC1517874:FG=1; BIDUPSID=BE6E148AD89670194AA8166CC1517874; PSTM=1541348839; BD_UPN=12314753; BDUSS=9vMmdrZ3p Host: www.baidu.com Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 ------------ ***contentType:说明请求体的编码类型. 默认为urlencodeed,如果是json需要说明contentType:json, ***userAgent告诉浏览器请求者的相关信息如windosw操作系统,chrome浏览器,) User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 响应头: ResponseHeaders: Bdpagetype: 2 Bdqid: 0x9a4dff190000efd3 Cache-Control: private Connection: Keep-Alive Content-Encoding: gzip Content-Type: text/html;charset=utf-8 Date: Sat, 24 Nov 2018 19:20:11 GMT Expires: Sat, 24 Nov 2018 19:20:10 GMT Server: BWS/1.1 Set-Cookie: BDSVRTM=327; path=/ Set-Cookie: BD_HOME=1; path=/ Set-Cookie: H_PS_PSSID=26523_1463_21088_26350; path=/; domain=.baidu.com Strict-Transport-Security: max-age=172800 Transfer-Encoding: chunked X-Ua-Compatible: IE=Edge,chrome=1 请求体:只有post请求才有请求体,get请求没有请求体,get的请求内容放在请求头中.所以contentType在poset请求的时候才有意义.
wsgi模块:
wsgi模块功能是拆包和封包
拆包只拆urlencodeed类型的请求数据, 它把请求数据拆成字典放在request.POST里面, 如果是json格式的就不管, 要自己取reqeust.body获取.再解码反序列化.
所以请求来的时候先获取数据: request.body = 'json的序列化数据',
urlencodeed类型--->拆包后放在reques.POST中
json类型--->不管, 要自己去request.body中取再解码和反序列化.