【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上,代码写的很简单仅供学习哦。后面有时间可以把模板渲染也接入进去,这样就是一个后端渲染的小框架啦。不过现在似乎比较流行前端渲染,那后端就轻松多啦。


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

相关文章
|
18天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
8天前
|
JSON 安全 中间件
Python Web 框架 FastAPI
FastAPI 是一个现代的 Python Web 框架,专为快速构建 API 和在线应用而设计。它凭借速度、简单性和开发人员友好的特性迅速走红。FastAPI 支持自动文档生成、类型提示、数据验证、异步操作和依赖注入等功能,极大提升了开发效率并减少了错误。安装简单,使用 pip 安装 FastAPI 和 uvicorn 即可开始开发。其优点包括高性能、自动数据验证和身份验证支持,但也存在学习曲线和社区资源相对较少的缺点。
42 15
|
4天前
|
关系型数据库 API 数据库
Python流行orm框架对比
Python中有多个流行的ORM框架,如SQLAlchemy、Django ORM、Peewee、Tortoise ORM、Pony ORM、SQLModel和GINO。每个框架各有特点,适用于不同的项目需求。SQLAlchemy功能强大且灵活,适合复杂项目;Django ORM与Django框架无缝集成,易用性强;Peewee轻量级且简单,适合小型项目;Tortoise ORM专为异步框架设计;Pony ORM查询语法直观;SQLModel结合Pydantic,适合FastAPI;GINO则适合异步环境开发。初学者推荐使用Django ORM或Peewee,因其易学易用。
|
7天前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
43 7
|
1月前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
73 7
|
1月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
83 2
|
1月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
2月前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
73 1
|
2月前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
151 3
|
2月前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
43 4

热门文章

最新文章