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---:结束,释放资源')

tornado 03 请求与响应的更多相关文章

  1. tornado的请求与响应

    tornado请求与响应相关 一.配置文件config.py 中的settings 有哪些配置: debug:设置tornado是否工作再调试模式下,默认为false 即工作再生产模式下 true的特 ...

  2. 2.(基础)tornado的请求与响应

    之前我们介绍了tornado 的基础流程,但是还遗留了一些问题,今天我们就来解决这些遗留问题并学习新的内容 settings,使用tornado.web.Application(handler, ** ...

  3. SpringMVC 03: 请求和响应的乱码解决 + SpringMVC响应Ajax请求

    请求或响应的中文乱码问题 tomcat9解决了get请求和响应的中文乱码问题,但是没有解决post请求或响应的中文乱码问题 tomcat10解决了get和post请求以及响应的中文乱码问题 考虑到实际 ...

  4. 2.tornado请求与响应

    之前我们介绍了tornado的基础流程,但还遗留了一些问题.今天我们就来解决遗留问题并学习新的内容 settings,使用tornado.web.Application(handler, **sett ...

  5. tornado请求与响应

    tornado中处理请求与响应的类如下, 所有视图类必须继承该类: tornado.web.RequestHandler 一. 响应之self.write()方法 1.  该方法可返回值的类型: 当返 ...

  6. openresty(完整版)Lua拦截请求与响应信息日志收集及基于cjson和redis动态路径以及Prometheus监控(转)

    直接上文件 nginx.conf #运行用户和组,缺省为nobody,若改为别的用户和组,则需要先创建用户和组 #user wls81 wls; #开启进程数,一般与CPU核数等同 worker_pr ...

  7. HTTP请求与响应协议

    HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则 HTTP就是一个通信规则,通信规则规定了客户端发送给服 ...

  8. HTTP请求和响应1:概述

    HTTP的报文分为请求报文和响应报文,打开一个web页面后,浏览器将发起一个HTTP请求报文.HTTPserver收到请求后将回送一个响应报文. 报文的基本结构 HTTP的请求和响应报文都由三个部分组 ...

  9. Django底层剖析之一次请求到响应的整个流程

    As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...

随机推荐

  1. JUNIT的用法简要总结

    JUNIT是一个单元测试框架,可以用来测试我们程序中的某个模块是否工作正常.而不需要去写一个MAIN函数来测试,方便快捷. 经过对博客http://blog.csdn.net/andycpp/arti ...

  2. php 读取和下载execl

    最近用到php 对excel 的操作 下来 小弟为大家 先贴一下自己的代码  有什么补充的 大神们请指点下.感激不尽. 我用的是yii2   yii2中有类 phpexcel 先说说下载吧. 首先下载 ...

  3. jQuery 对象和 json 之间的转换

    JSON.parse() json 转换成 对象 JSON.stringify() 对象转换成json 想问下广大网友大神 js 里面有数组转换或者转换成数组的函数么?小弟等--

  4. jquery 获取url 参数方法 以及 解决url中文问题

    //jQuery 动态给a 标签赋值 跳转 新的页面打开. /* <a class="btn btn-success" id="test" target= ...

  5. 微信小程序怎么获取用户输入

    能够获取用户输入的组件,需要使用组件的属性bindchange将用户的输入内容同步到 AppService. <input id="myInput" bindchange=& ...

  6. win10 Kinect2 Visualstudio2015 opencv3环境搭建

    1.下载kinect SDK ( Kinect for Windows SDK 2.0 ):  https://www.microsoft.com/en-us/download/details.asp ...

  7. mybatis spring 框架整合

    driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test user=LF password=LF <?xml versi ...

  8. WEB前端--JavaScript

    JavaScript JavaScript基础 一.JavaScript简介 JavaScript是一种嵌入到HTML文件中的描述性语言,由浏览器的解释器将其动态地处理成可执行的代码,能独立地完成与客 ...

  9. threading学习

    多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进 ...

  10. 20145218PC平台逆向破解

    20145218PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同 ...