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---:结束,释放资源')
tornado 03 请求与响应的更多相关文章
- tornado的请求与响应
tornado请求与响应相关 一.配置文件config.py 中的settings 有哪些配置: debug:设置tornado是否工作再调试模式下,默认为false 即工作再生产模式下 true的特 ...
- 2.(基础)tornado的请求与响应
之前我们介绍了tornado 的基础流程,但是还遗留了一些问题,今天我们就来解决这些遗留问题并学习新的内容 settings,使用tornado.web.Application(handler, ** ...
- SpringMVC 03: 请求和响应的乱码解决 + SpringMVC响应Ajax请求
请求或响应的中文乱码问题 tomcat9解决了get请求和响应的中文乱码问题,但是没有解决post请求或响应的中文乱码问题 tomcat10解决了get和post请求以及响应的中文乱码问题 考虑到实际 ...
- 2.tornado请求与响应
之前我们介绍了tornado的基础流程,但还遗留了一些问题.今天我们就来解决遗留问题并学习新的内容 settings,使用tornado.web.Application(handler, **sett ...
- tornado请求与响应
tornado中处理请求与响应的类如下, 所有视图类必须继承该类: tornado.web.RequestHandler 一. 响应之self.write()方法 1. 该方法可返回值的类型: 当返 ...
- openresty(完整版)Lua拦截请求与响应信息日志收集及基于cjson和redis动态路径以及Prometheus监控(转)
直接上文件 nginx.conf #运行用户和组,缺省为nobody,若改为别的用户和组,则需要先创建用户和组 #user wls81 wls; #开启进程数,一般与CPU核数等同 worker_pr ...
- HTTP请求与响应协议
HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则 HTTP就是一个通信规则,通信规则规定了客户端发送给服 ...
- HTTP请求和响应1:概述
HTTP的报文分为请求报文和响应报文,打开一个web页面后,浏览器将发起一个HTTP请求报文.HTTPserver收到请求后将回送一个响应报文. 报文的基本结构 HTTP的请求和响应报文都由三个部分组 ...
- Django底层剖析之一次请求到响应的整个流程
As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...
随机推荐
- Ant之build.xml详解---可用
Ant的概念 :在Eclipse中使用Ant Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率. Ant和make命令很像. ...
- 第01章 开发准备(对最新版的RN进行了升级)1-3+项目结构介绍
- Eclipse导入MyEclipse项目遇到问题解答
导入一个其他IDE中的项目,第一一定要想到:不同IDE中的配置文件问题: 比如:tomcat启动寻找项目的根目录问题,Eclipse的webContext,Myeclipse的是Webroot文件夹, ...
- 409. Longest Palindrome 最长对称串
[抄题]: Given a string which consists of lowercase or uppercase letters, find the length of the longes ...
- SqlServer-geography && Spatial result
说起geography(地理)这个类型,我感觉好陌生,以前真的没有见过,今天在查询某个Address表的时候,却发现了新大陆——Spatial result(空间的结果). (1)表的结构 (2)查询 ...
- ROS naviagtion analysis: costmap_2d--LayeredCostmap
博客转自:https://blog.csdn.net/u013158492/article/details/50490490 在数据成员中,有两个重要的变量:Costmap2D costmap_和 s ...
- Apache htpasswd命令
一.简介 htpasswd是apache的一个工具,该工具主要用于建立和更新存储用户名.密码的文本文件,主要用于对基于http用户的认证. 二.语法 Usage: htpasswd [-cimBdps ...
- [GO]冒泡排序的原理和代码实现
冒泡排序的原理:对于一个数组里所有的元素进行两两比较,发生大于则变换数组下标则为升序排序,发生小于则变换数据下标的则为降序排序 比如给定的数组为[1, -2, 3, -4],对于我们的需求,两两比较后 ...
- [GO]工程管理
同级目录: 1.分文件编程,多个源文件,必须放在src目录 2.设置GOPATH目录,目录地址不包括src后缀 3.同一个目录,包名必须一样 4.go env查看go相关的环境路径 5.同一个目录,调 ...
- css总结3:Flex 布局教程:Flex-demos(转)
上一篇文章介绍了Flex布局的语法,今天介绍常见布局的Flex写法. 你会看到,不管是什么布局,Flex往往都可以几行命令搞定. 我只列出代码,详细的语法解释请查阅<Flex布局教程:语法篇&g ...