tornado_请求与响应

认识请求与响应

浏览器是如何能访问到服务器的?服务器又是怎样给浏览器回应的?
当我们在浏览器里输入网址时,浏览器会根据域名解析找到对应的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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容

  • 浏览器与服务器之间通信 请求信息 浏览器在发送请求的时候,会发送具体的请求信息,由请求行,请求消息头,请求正文。 ...
    Python野路子阅读 2,612评论 0 51
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,548评论 0 6
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,489评论 1 45
  • 深入浅出HTTP协议(WEB开发和面试必备) 1.基础概念篇 a.简介 HTTP是Hyper Text Trans...
    半世韶华忆阑珊阅读 1,222评论 0 7
  • arp的几个命令容易混淆,一下做记录: arp arp(address resolution protocol)协...
    hades2013阅读 1,172评论 0 0