美文网首页
tornado_请求与响应

tornado_请求与响应

作者: 三月向阳的风 | 来源:发表于2019-01-19 16:16 被阅读0次

认识请求与响应

浏览器是如何能访问到服务器的?服务器又是怎样给浏览器回应的?
当我们在浏览器里输入网址时,浏览器会根据域名解析找到对应的IP地址,然后会与web服务器建立一个TCP连接,当连接建立好之后浏览器会给web服务器发送一个http请求。之后服务器会给浏览器响应一个301永久重定向响应。


request
请求(客户端---服务器)

一个http请求报文由请求行<request-line>、请求头部<headers>、空行<blank-line>和请求数据<request-body>4个部分组成

  • 请求头
Accept: 浏览器可以接受的MIME类型。
Accept-Charset: 浏览器支持的字符集
Accept-Encoding: 浏览器能够解码的数据压缩方式
Accept-language: 所希望的语言
Host: 请求的主机和端口
User-Agent: 通知服务器,浏览器类型.
Content-Length: 表示请求消息正文的长度
Connection: 表示是否需要持久连接(Keep-alive)
Cookie: 最重要的请求头信息之一
  • 请求行
<!-- 请求行,位于第一行 -->
Method: 一般为 GET 或者 POST
Path-to-resource:请求的资源的URI
Http/Version-number:客户端使用的协议的版本,例:HTTP/1.1
  • 请求正文

请求具体内容,比如:URL中传入的参数,form表单里面的内容等


response
响应(服务器---客户端)

一个http响应报文由状态行<status-line>、响应头部<headers>、空行<blank-line>和响应数据<response-body>4个部分组成

  • 响应头
Server: 通知客户端,服务器的类型
Content-Encoding: 响应正文的压缩编码方式。
Content-Length: 通知客户端响应正文的数据大小
Content-Type: 通知客户端响应正文的MIME类型
Content-Disposition: 通知客户端,以下载的方式打开资源

-响应行

Http/Version-number:服务器用的协议版本�
Statuscode:响应码。
  • 响应正文

具体的响应内容,如html,JavaScript 等数据内容

常见状态码

状态码.png

设置响应头

为什么请求头我们设置,而是设置的响应头?
请求头是浏览器发过来的,不受服务器控制的,我们能控制的就是响应头。

set_header
设置响应头,相同响应头名字只允许设置一个

add_header
添加响应头,相同响应头名字允许存在多个

clear_header
清除响应头

class MainHandler(tornado.web.ReqeustHandler):
    def get(self):
        self.set_headers('name', 'xiaoming')  # 设置响应头
        self.set_headers('age', '18')
        
        self.add_headers('name', 'jack')  # 添加响应头
        self.add_headers('name', 'rose')
        
        self.clear_headers('age')  # 清除响应头
        self.clear_headers('name')

发送错误码

send_error
主动让浏览器抛出错误

write_error
自定义报错信息

set_status
自定义设置状态码

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('Life is short You need python')
        # self.flush()  
# 刷新,输出到浏览器,此时状态码为 200:OK
# 已经变成了既定的事实了,所以无法改变

        self.send_error(404)  # 让浏览器主动报错(404: Not Found)
        self.set_status(500, 'OK')  # 设置状态码
        
    def write_error(self, status_code, **kwargs):
                """重写write_error自定义报错信息"""
        self.write('报错码为:%s,错误信息为:Not Found' % status_code)
        # self.render('error.html')


app = Application([
        (r'/', MainHandler),
    ])  

上述我们说的是发送错误码自定义报错

除此之外,我们还可以通过添加一个Handler,然后返回一个自己写好的错误页面用来进行对未定义路由的处理

class NotHandler(tornado.web.RequestHandler):
    """自定义404的一个Handler"""
    def get(self, *args, **kwargs):
        self.render('error.html')


app = Application([
        (r'/(.*)', NotHandler)
    ])

请求与响应的执行流程

tornado 在接受到请求之后,会按照此顺序选择响应的方法来执行

class MainHandler(tornado.web.RequestHandler):
    
    def set_default_headers(self):
        """设置默认响应头"""
        pass
    
    def initialize(self):
        """初始化"""
        pass
    
    def prepare(self):
        """准备工作"""
        pass
    
    def get(self):
        self.write('hello world')
    
    def post(self):
        pass
    
    def write_error(self):
        """处理错误信息"""
        pass
    
    def on_finish(self):
        """结束并且释放资源"""
        pass

相关文章

  • tornado_请求与响应

    认识请求与响应 浏览器是如何能访问到服务器的?服务器又是怎样给浏览器回应的?当我们在浏览器里输入网址时,浏览器会根...

  • django知识点五

    请求与响应 一、请求与响应 请求与响应过程 当用户请求一个页面时,Django 把请求的数据包装成一个 HttpR...

  • java笔记2-servlet-处理请求与响应

    目标 怎么处理请求与响应web容器到底是怎么实现请求与响应的HttpServletRequest处理请求http请...

  • Requests

    Requests库 目录一、Requests基础二、发送请求与接收响应(基本GET请求)三、发送请求与接收响应(基...

  • 请求与响应

    HttpServletResponse HttpServletResponse继承了ServletResponse...

  • 请求与响应

    Server + Client + HTTP 浏览器负责发起请求 服务器在 80 端口接收请求 服务器负责返回内容...

  • Web容器

    容器? 请求与响应大致流程:

  • HTTP入门(二):用Chrome开发者工具查看 HTTP 请求

    HTTP入门(二):用Chrome开发者工具查看 HTTP 请求与响应 本文简单总结HTTP的请求与响应。本文主要...

  • HTTP缓存

    http缓存:存储与请求关联的响应,并将存储的响应复用与后续请求 http缓存的好处: 响应速度快 减轻服务器的压...

  • 网络教程

    http协议包括 请求协议:请求行、请求头、请求体 响应协议:响应行、响应头、响应体 servlet

网友评论

      本文标题:tornado_请求与响应

      本文链接:https://www.haomeiwen.com/subject/xjkzdqtx.html