zoukankan      html  css  js  c++  java
  • tornado 03 请求与响应

    tornado 03 请求与响应

    一、请求与响应

      浏览器与服务器之间沟通的到底是什么信息

    #服务器在后台一直保持运行着
    #浏览器通过URL(路由、地址)发送请求
    #服务器接收请求了通过tornado处理结果,然后将结果发送给浏览器,最后页面显示

      请求信息

    #请求 
    #浏览器在发送请求的时候,会发送具体的请求信,由请求行、请求消息头和请求正文组成
    
    #请求行
    #请求行一般位于第一行,包含内容为:
    Method #一般为GRT或者POST
    Path-to-resourse #请求的资源的URI
    Http/Version-number #客户端使用的协议de的版本,有HTTP/1.0和HTTP/1.1
    
    #请求消息头
    #向浏览器传递附加消息
    Accept:#浏览器可以接受的MIME类型。
    Accept-Charset#浏览器支持的字符集,如gbk,utf-8
    Accept-Encoding#浏览器能够解码的数据压缩方式, 如:gzip
    Accept-language#所希望的语言
    Host#请求的主机和端口User-Agent:通知服务器,浏览器类型.
    Content-Length#表示请求消息正文的长度 
    Connection#表示是否需要持久连接(Keep-alive)
    Cookie #这是最重要的请求头信息之一(会话有关)
    
    #请求正文
    #请求具体内容,比如:URL中传入的参数,form表单里面的内容等等

      响应信息

    #响应信息
    #响应信息为服务器的处理结果。主要包含:响应行,响应消息头,响应正文
    
    #响应头
    Server# 通知客户端,服务器的类型
    Content-Encoding#响应正文的压缩编码方式。常用的是gzip
    Content-Length#通知客户端响应正文的数据大小
    Content-Type#通知客户端响应正文的MIME类型
    Content-Disposition#通知客户端,以下载的方式打开资源
    
    #响应行
    #响应行主要报错如下信息:
    Http/Version-number#服务器用的协议版本
    Statuscode:响应码。代表服务器处理的结果的一种表示,常用的响应码有:200:正常  302/307:重定向 304:服务器的资源没有被修改 404:请求的资源不存在 500:服务器报错了
    #message:响应码描述。例如200的描述为OK
    
    
    #响应正文
    #具体的响应内容,如html,JavaScript 等数据内容

     二、设置响应头

    #请求头不能修改,服务器是可以修改响应头的
    
    #如何改变响应头
     
    class MainHandler(tornado.web.RequestHandler): #修改
        def get(self):
            self.write('set_header')
            self.set_header('xuchengcheng','haoshuai') #改变对应的响应即可
            self.set_header('xuchengcheng','bushuai') #如果是修改相同的响应,以后修改的为准
    
    class AddHandler(tornado.web.RequestHandler): #添加
        def get(self):
            self.write('add_header')
            self.add_header('xiaozijian','xiong')
            self.add_header('xiaozijian','chou') #相同响应添加不会覆盖掉
            self.add_header('xiaozijian','liang')
    
    class ClearHandler(tornado.web.RequestHandler): #删除
        def get(self):
            self.write('clear_header')
            self.add_header('xiaozijian','xiong')
            self.add_header('xiaozijian','chou') #相同响应添加不会覆盖掉
            self.add_header('xiaozijian','liang')
            self.clear_header('xiaozijian') #会将所有的响应xiaozijian全部删除掉

    三、发送错误码

       发送错误码

    #服务器如何主动地给浏览器报错
    class SendHandler(tornado.web.RequestHandler): #发送错误码
        def get(self):
            self.write('send_error')
            self.flush() #将缓冲区的内容写在了浏览器上面,这样已经发送过信息并由处理结果了,然后下面的404就不能改了(无法修改响应头了)
            self.send_error(404) #调用send_error这个方法就可以主动地发送错误码

      修改报错样式

    class SendHandler(tornado.web.RequestHandler): #发送错误码
        def get(self):
            self.write('send_error')
            self.send_error(404) 
    
        def write_error(self, status_code, **kwargs): #调用了这个方法,改变页面上显示的效果
            self.write('status_code:%s'% status_code) #返回一个write;也可以返回一个网页,用render

      如何在没进入路由前发送错误码

    class NotHandler(tornado.web.RequestHandler): #发送错误码
        def get(self,*args,**kwargs):
            self.write('send_error')
            self.set_status(404,'error') #修改状态码
    
    application = tornado.web.Application(
            handlers=[
                (r'/index',MainHandler),
                (r'/add', AddHandler),
                (r'/clear', ClearHandler),
                (r'/send', SendHandler),
                (r'/(.*)', NotHandler), #在正则表达式下,上面的传参需要传入args和kwargs;同时这个任意报错需要放在最下面,当上面所有路由都找不到的时候就会匹配到这个路由,然后报送错误码;开发的时候建议不要写上去
            ],
            template_path = 'templates',
            debug=True
        )

    四、处理流程

      请求处理过程

    #tornado在接收到请求的之后,会做些什么
    class IndexHandler(tornado.web.RequestHandler): #Tornado 在接受到请求之后,后按照此顺序选择响应的方法来执行;但是下面这些函数摆放的顺序没关系
        def set_default_headers(self): #设置头
            print('--set_default_headers--:设置header')
        def initialize(self): #初始化
            print(' ---initialize---:初始化')
        def prepare(self): #准备工作
            print(' ---prepare---:准备工作')
        def get(self,*args,**kwargs):  #处理get请求
            print(' ---get---:处理get请求'+ ' <br>')
            self.write('ssasasasas')
        def post(self,*args,**kwargs): #处理post请求
            self.write(' ---post---:处理post请求'+ ' <br>')
        def write_error(self, status_code, **kwargs):  #处理错误
            print(' ---write_error---:处理错误')
        def on_finish(self): #结束,释放资源
            print(' ---on_finish---:结束,释放资源')
  • 相关阅读:
    The Levy Flight
    Congestion and Flow Control at the Bundle Layer
    Fragmentation & Reassembly
    six classes of services in delay tolerant networks
    javascript的with表示什么?
    js定时器和计时器
    document.getElementById与getElementByName的区别
    MySQL查询时区分大小写的方法,查询字母出现中文的解决方法
    JavaScript的格式
    地址栏中传递中文参数
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8964808.html
Copyright © 2011-2022 走看看