web请求流程——HTTP协议

一、web请求流程

  先从本地DNS域名服务器找相对的IP地址如果没有,找 根DNS服务器——>顶级DNS服务器——>权威DNS服务器——>二级域名的DNS服务器

  补充:字符串和字节的转换:
            >>> s = "hello"
            >>> bytes(s,encoding='utf-8')
            b'hello'
            >>> b = bytes(s,encoding='utf-8')
            >>> str(b, encoding='utf-8')

HTTP协议简单传输

  请求头(界面):

    GET / HTTP/1.1
    Host: 127.0.0.1:8080   (主机名)
    Connection: keep-alive (保持链接)
    Cache-Control: max-age=0 (缓存不失效)
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9

  请求体(界面):

    就是数据部分,与请求头用\r\n\r\n作为分隔符分开

  响应头(后台):

    HTTP/1.1 200 OK  (最简单的响应头)

  响应体(后台):

    就是用户能能看到的内容

  补充:HTTP:默认端口是80

      https:默认端口是443

    状态码:2XX: 200 (OK) | 3XX: 302 304 | 4XX 404(not found) 403(forbidden 禁止访问)|  

        5XX: 500 (服务端代码错误) 502 (网关错误 bad gateway)

    了解更多可以看肯《HTTP图解》这本漫画书,日本作家

二、自定义一个简单的web框架

  需求:想要通过输入不同的 url, 获得不一样的相应内容

    路由系统:
      routes = [ ('/xxx', f1), ('/ooo', f2), ('/hhh', f3) ]

      def f1():
        return b'this is xxxx'

      def f2():
        return b'this is oooo'

   自定义的web框架流程:
      a. sokect 服务端
      b. uri 和 函数的 对应关系
        路由系统
      c. 将html代码和mysql的数据进行融合 (自己定制规则 , 使用第三方的工具)
        模板引擎渲染

    web框架的分类:

        第一种维度分类

            - a,b,c  ----> tornado
            - a(用第三方), b, c ----> django wsgiref  uwsgi
            - a(第三方),b, c(第三方) -----》 flask 

        第二种维度分类

            - django
            - 其他

 

  

 

posted @ 2019-07-09 20:17  水天两色  阅读(352)  评论(0编辑  收藏  举报