【Python】简单Web框架从零开始(三):Http响应格式

简介: 从上图可以看到响应客户端请求的协议格式与客户端请求的格式很类似,除了首行稍微不一样外。首行称为状态行,其格式为:[HTTP协议版本][空格][状态码][空格][消息][\r\n]。其中状态码是一组三位数组成的数字代码,具体介绍可以百度百科,常见的有200,400,404等等。跟在状态码后面的响应消息是与状态码对应的文本描述。 实体头部数据格式完全与请求的头部格式一致,里面包含了服务器相关的信息,以及支持哪些功能和特殊的内容。

【Python】简单Web框架从零开始(三):Http响应格式


目录


【Python】简单Web框架从零开始(一):Web服务


【Python】简单Web框架从零开始(二):Http请求格式


一、前言


   前面两期介绍HTTP网络部分和客户端请求解析,这篇介绍如何响应客户端的请求,完成请求应答之后基本的Web框架就差不多了,剩下的就是逐个补齐一些所需的模块啦。


二、响应格式


微信截图_20220424003825.png


   从上图可以看到响应客户端请求的协议格式与客户端请求的格式很类似,除了首行稍微不一样外。首行称为状态行,其格式为:[HTTP协议版本][空格][状态码][空格][消息][\r\n]。其中状态码是一组三位数组成的数字代码,具体介绍可以百度百科,常见的有200,400,404等等。跟在状态码后面的响应消息是与状态码对应的文本描述。


   实体头部数据格式完全与请求的头部格式一致,里面包含了服务器相关的信息,以及支持哪些功能和特殊的内容。


   响应数据体就是真正给客户端“显示”的内容,想要客户端正确接收到服务器的响应数据,需要在响应的实体头里面加上Content-Length用于表示响应数据体的大小,还可以增加Content-Type来表示响应数据体的内容格式。Content-Type有很多类型 ,具体可以去https://tool.oschina.net/commons/这个网站上面查看。


   客户端的请求一般分为两类,一种是静态资源请求例如访问一个静态页面(如下图展示的HTML文件页面内容),文件下载,图片请求等等。这些请求在收到服务器响应后就会在浏览器中尝试显示出来,Content-Type就可以标识响应的内容是在浏览器中渲染还是下载。另一种就是后台数据交互,例如动态获取天气信息http://www.weather.com.cn/data/cityinfo/101010100.html,服务器返回的是一段JSON格式的数据,具体如何在浏览器里面展示,就需要使用Javascript脚本进行处理了。这种一般采用Ajax后台请求数据,然后动态展示到页面上。


微信截图_20220424003836.png


三、响应代码


   理解响应的协议格式结构后,实现起来就比较简单了,在发送数据前先将状态行和请求头数据发送出去,然后在发响应数据体即可。只要注意Content-Length是必须的,且长度要等于响应数据体的长度,否则客户端就无法正确响应了。


def write_header(self, code=200, message="OK"):
    # 状态行
    self.request.wfile.write("HTTP/1.1 {0} {1}\r\n".format(code, message))
    # 实体头
    for k, v in self.headers.items():
        self.request.wfile.write("{0}: {1}\r\n".format(k,v))
    # 注意响应实体头发完后,还需要发一个空行
    self.request.wfile.write("\r\n")
def write(self, body):
    self.raw_data += body
def flush(self):
    if "Content-Length" not in self.headers:
        self.headers["Content-Length"] = len(self.raw_data)
    self.write_header(self.code, self.message)
    self.request.wfile.write(self.raw_data)
    self.request.wfile.flush()


   现在浏览器都支持的HTTP版本为1.1,因此我采用默认回复客户端HTTP/1.1,而没有动态判断。不同版本支持的行为有哪些,可以自行百度一下哦


四、完结


   具体的代码已经放到Github上,代码写的很简单仅供学习哦。后面有时间可以把模板渲染也接入进去,这样就是一个后端渲染的小框架啦。不过现在似乎比较流行前端渲染,那后端就轻松多啦。


欢迎微信搜索"游戏测试开发"关注一起沟通交流。

相关文章
|
7月前
|
算法 关系型数据库 Python
配电网中考虑需求响应(Python代码实现)【硕士论文复现】
配电网中考虑需求响应(Python代码实现)【硕士论文复现】
101 1
|
7月前
|
运维 算法 新能源
基于风光储能和需求响应的微电网日前经济调度(Python代码实现)
基于风光储能和需求响应的微电网日前经济调度(Python代码实现)
157 0
|
11月前
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
501 69
|
8月前
|
JSON 数据挖掘 API
闲鱼商品列表API响应数据python解析
闲鱼商品列表API(Goodfish.item_list)提供标准化数据接口,支持GET请求,返回商品标题、价格、图片、卖家信息等。适用于电商比价、数据分析,支持多语言调用,附Python示例代码,便于开发者快速集成。
|
8月前
|
JSON 自然语言处理 API
闲鱼商品详情API响应数据python解析
闲鱼商品详情API(goodfish.item_get)通过商品ID获取标题、价格、描述、图片等信息,支持Python等多语言调用。本文提供Python请求示例,包含请求构造与数据处理方法。
|
8月前
|
JSON API 数据格式
微店商品列表API响应数据python解析
微店商品列表API为开发者提供稳定高效获取商品信息的途径,支持HTTP GET/POST请求,返回JSON格式数据,含商品ID、名称、价格、库存等字段,适用于电商数据分析与展示平台搭建等场景。本文提供Python调用示例,助您快速上手。
|
9月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
411 1
|
11月前
|
数据采集 人工智能 测试技术
Python有哪些好用且实用的Web框架?
Python 是一门功能强大的编程语言,在多个领域中得到广泛应用,包括爬虫、人工智能、游戏开发、自动化测试和 Web 开发。在 Web 开发中,Python 提供了多种框架以提高效率。以下是几个常用的 Python Web 框架:1) Django:开源框架,支持多种数据库引擎,适合新手;2) Flask:轻量级框架,基于简单核心并通过扩展增加功能;3) Web2py:免费开源框架,支持快速开发;4) Tornado:同时作为 Web 服务器和框架,适合高并发场景;5) CherryPy:简单易用的框架,连接 Web 服务器与 Python 代码。这些框架各有特色,可根据需求选择合适的工具。
564 14
|
数据采集 Web App开发 存储
打造高效的Web Scraper:Python与Selenium的完美结合
本文介绍如何使用Python结合Selenium,通过代理IP、设置Cookie和User-Agent抓取BOSS直聘的招聘信息,包括公司名称、岗位、要求和薪资。这些数据可用于行业趋势、人才需求、企业动态及区域经济分析,为求职者、企业和分析师提供宝贵信息。文中详细说明了环境准备、代理配置、登录操作及数据抓取步骤,并提醒注意反爬虫机制和验证码处理等问题。
393 1
打造高效的Web Scraper:Python与Selenium的完美结合
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。

推荐镜像

更多