01 请求与响应

请求

浏览器在发送请求的时候,会发送具体的请求信息,由请求行,请求消息头,请求正文

请求消息头

向服务器传递附加信息

Accept: 浏览器可以接受的MIME类型。

Accept-Charset: 浏览器支持的字符集,如gbk,utf-8

Accept-Encoding: 浏览器能够解码的数据压缩方式, 如:gzip,deflate

Accept-language: 所希望的语言

Host:请求的主机和端口

User-Agent:通知服务器,浏览器类型.

Content-Length:表示请求消息正文的长度

Connection:表示是否需要持久连接(Keep-alive)

Cookie:这是最重要的请求头信息之一(会话有关)

请求行 #在request header右边view parsed

请求行,位于第一行,包含内容为:

Method: 一般为 GET 或者 POST

Path_to_resource:请求的资源的URI

Http/Version-number:客户端使用的协议的版本,有HTTP/1.0和HTTP/1.1

请求正文

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

响应信息

响应信息为服务器的处理结果。主要包含:响应行,响应消息头,响应正文

响应行

响应行主要报错如下信息:

Http/Version-number:服务器用的协议版本

Statuscode:响应码。代表服务器处理的结果的一种表示,常用的响应码有

      200:正常

      302/307:重定向

      304:服务器的资源没有被修改

      404:请求的资源不存在

      500:服务器报错了 message

      :响应码描述。例如200的描述为OK

响应头

Server: 通知客户端,服务器的类型

Content-Encoding:响应正文的压缩编码方式。常用的是gzip

Content-Length:通知客户端响应正文的数据大小

Content-Type:通知客户端响应正文的MIME类型

Content-Disposition:通知客户端,以下载的方式打开资源

响应正文:

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

02 设置响应头

设置给定响应头

Handler

class HeaderHandler(tornado.web.RequestHandler):

def get(self):

self.write('set_header')

self.set_header('aaa', '1111')

self.set_header('bbb', '2222')

self.set_header('bbb', '3333')

set_header

set_header 可以设置响应头,如果设置两个一样响应头,会以后面的值为准.响应头控制浏览器的一些行为.

添加给定响应头

Handler

class AddHandler(tornado.web.RequestHandler):

def get(self):

self.write('add_header')

self.add_header('ccc', '3333')

self.add_header('ccc', '4444')

add_header

add_header 可以向响应头里面添加信息,而且是可以出现相同信息

撤销给定响应头

Handler

class CleanHandler(tornado.web.RequestHandler):

def get(self):

self.write('clear_heander')

self.add_header('abcd', '5555')

self.add_header('abcd', '6666')

self.clear_header('abcd') l

clear_header

clear_header 可以撤销给定的响应头信息,多个同名的响应头一次删除.

03 发送错误码

发送错误码到浏览器

Handler

class SendHandler(tornado.web.RequestHandler):

def get(self):

self.write('send_error')

#self.flush()

self.send_error(404)

使用 send_error 时需要注意:如果已经执行了 flush,则不能再执行 send_error,因此该方法将简单地终止响应,如果输出已写入但尚未刷新,则将其丢弃并替换为错误页面

send_error

send_error 可以将指定的 HTTP 错误码发送到浏览器

实现自定义错误页面

Handler

def write_error(self, status_code, **kwargs):

self.write('status_code: %s' % status_code)

write_error

send_error 在其底层调用的是 write_error,因此只要重写此方法,就可以实现自定义的的错误页面

未定义路由处理

Handler

class NotFoundHandler(tornado.web.RequestHandler):

def get(self, *args, kwargs):

**         self.send_error(404)

def write_error(self, status_code, **kwargs):

self.render('error_notfound.html')

路由

(r'/(.*)', NotFoundHandler)

用正则匹配出来的路由要用*args,**kwargs路由接收.

self.set_status(404,'error message')直接设置状态码.

自定义错误页面

注意:需要把此路由放到路由表的最后面,通过这种方式,可以让返回自定义的错误页面

04 请求处理过程

Handler

class IndexHandler(tornado.web.RequestHandler):

def set_default_headers(self):

print(' ---set_default_headers---:设置header')

def initialize(self):

print(' ---initialize---:初始化')

def prepare(self):

print(' ---prepare---:准备工作')

def get(self):

self.write(' ---get---:处理get请求'+' ')

def post(self):

self.write(' ---post---:处理post请求'+' ')

def write_error(self, status_code, **kwargs):

print(' ---write_error---:处理错误')

def on_finish(self):

print(' ---on_finish---:结束,释放资源') l

调用顺序

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

tornado框架基础03-请求与响应的更多相关文章

  1. tornado 03 请求与响应

    tornado 03 请求与响应 一.请求与响应 浏览器与服务器之间沟通的到底是什么信息 #服务器在后台一直保持运行着 #浏览器通过URL(路由.地址)发送请求 #服务器接收请求了通过tornado处 ...

  2. tornado框架基础10-websocket

    websocket 01 长轮询 在网页,我们经常扫码登录,结合之前的学习的知识点,来思考下,前端是如何知道用户在手机上扫码登录了呢? 长轮询:客户端不断的向服务器发送请求 缺点: \1. 开销大 \ ...

  3. laravel框架总结(一) -- 请求和响应

    一.laravel请求 1.获取请求 1>获取请求的 URI path 方法会返回请求的 URI.所以,如果接收到的请求目标是 http://domain.com/foo/bar,那么 path ...

  4. python的Web框架,Django框架中的请求与响应

    请求与响应 简单流程图 我们先来了解一个请求与响应的大概流程  视图函数接受到的request到底是个什么对象呢? 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的 ...

  5. tornado框架基础01-路由简介

    tornado 小而精 Django 大而全 Web框架 Tornado是一个由Python开发的Web框架 Web服务 利用Tornado,可以快速搭建和一个高性能的Web服务 非阻塞 Tornad ...

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

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

  7. tornado框架基础11-tornado异步

    01 同步和异步 生活中常常会遇到在超市排队买东西的情况,排在你前面的人没有结算完成,你就无法付账,在计算机中也有类似的情形,一个程序在执行之前,需要等待其他的程序执行完成,大家还能举出其他的例子吗? ...

  8. tornado框架基础09-cookie和session

    01 cookie 在上节,我们简单了解了登录过程,但是很明显,每次都需要登录,但是在平常逛网站的只需要登录一次,那么网站是如何记录登录信息的呢? 有没有什么办法可以让浏览器记住登录信息,下次再次打开 ...

  9. tornado框架基础04-模板基础

    01 模板 模板演示 配置路径 在 application 中配置模板文件和静态文件的路径: template_path='templates', static_path='static', 模板 & ...

随机推荐

  1. 图论之最小生成树之Kruskal算法

    Kruskal算法,又称作为加边法,是配合并查集实现的. 图示: 如图,这是一个带权值无向图我们要求它的最小生成树. 首先,我们发现在1的所有边上,连到3的边的边权值最小,所以加上这条边. 然后在3上 ...

  2. AFN清除图片缓存 以及菊花转圈

    AFNetworking网络库已经提供了很好的图片缓存机制,效率是比较高的,但是我发现没有直接提供清除缓存的功能,可项目通常都需要添加 清除功能的功能,因此,在这里我以UIImageView+AFNe ...

  3. 黑客攻防技术宝典web实战篇:核心防御机制习题

    猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 黑客攻防技术宝典web实战篇是一本非常不错的书,它的著作人之一是burpsuite的作者,课后的习题值得关注 ...

  4. C# ref和out传递参数总结

    如有雷同,不胜荣幸,若转载,请注明 C#中ref和out传递参数总结,两个都可用来传递参数,ref使用时必须先进行初始化,out则不需要,只要在返回之前赋值即可,文字废话到此,下面直接上例子 ref例 ...

  5. visual studio各版本下载

    软件包括以下几种: cn_visual_studio_2010_ultimate_x86_dvd_532347.part1.rar cn_visual_studio_2010_ultimate_x86 ...

  6. Python之单元测试——HTMLTestRunner

    前置条件:把HTMLTestRunner.py文件拷贝到External Libraries—>site-packages里面 import unittestimport HTMLTestRun ...

  7. java常用类要点总结

  8. 147 Insertion Sort List 链表插入排序

    用插入排序对链表进行排序. 详见:https://leetcode.com/problems/insertion-sort-list/description/ Java实现: 链表的插入排序实现原理很 ...

  9. android开发学习 ------- Error:Failed to open zip file.

    我们用Android Studio   Sync Project项目的时候,会出现如下的错误: 解决方案: Project视图下, 这块 https 改为 http 就可以了.

  10. c#很好用的定时器Quartz--含附件

    1.引用附件中的两个DLL 2.创建类 public class QuartzJob:IStatefulJob { private static ISchedulerFactory factory = ...