http

为什么需要协议,因为服务端和客户端通信需要统一的规则,否则无法正确获取到对方发送的信息.

没有请求协议,服务端拆不开请求的数据,
没有响应协议,浏览器拆不开响应的数据.
其实浏览器和服务端.彼此发的就是一堆字符串,只不过是有个有格式的字符串.

  这个有格式的字符串就是:

请求首行(一定要有)说明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请求的时候才有意义.
View Code

wsgi模块:  

wsgi模块功能是拆包和封包

拆包只拆urlencodeed类型的请求数据, 它把请求数据拆成字典放在request.POST里面,  如果是json格式的就不管, 要自己取reqeust.body获取.再解码反序列化.
所以请求来的时候先获取数据: request.body = 'json的序列化数据',
urlencodeed类型--->拆包后放在reques.POST中
json类型--->不管, 要自己去request.body中取再解码和反序列化.

原文地址:https://www.cnblogs.com/dingyunfeng/p/10509047.html