从零开始搭建Flask网站之二:http报文
来源:互联网 发布:张锁江离子液体数据库 编辑:程序博客网 时间:2024/05/16 08:44
HTTP报文
本文包括以下几部分: 报文流; HTTP报文的结构; 请求报文和响应报文
报文流
此内容不许多讲,一图足矣
HTTP报文的结构
HTTP报文由起始行,包含属性的首部和包含数据的主题三部分组成;起始行和首部就是由行分割的ASCII文本。每行以(回车+换行,记作CRLF)作为行终止;尽管HTTP指定为CRLF,但是稳健的应用程序页应该接受单个换行符作为行终止;一个典型的HTTP事务为:
在此引申一下, 在发送请求报文中,HOST字段为必须字段; 用户在浏览器中输入了www.joes-hardware.com, 并且通过DNS也能准确地找到该主机;但是该主机ip上对应的可能有若干个服务,而host属性可以帮助服务器最终确定用户想要的具体是哪个服务!!
另外关于http版本, 其格式为:HTTP/<major>.<minor>也就是说, HTTP/1.2的版本号是没有HTTP/1.11高的;
起始行
请求报文的起始行成为请求行,包含了一个方法,一个URL,以及HTTP版本; 其中常用的方法为GET/HEAD/POST/PUT/TRACE/OPTIONS/DELETE
在响应行中,包含了HTTP版本,数字状态码,原因短语;状态码100~199表示信息提示;200~299表示成功;300~399表示资源已经被移走;400~499表示客户端的请求出错;500~599表示服务器出错;
首部
首部一共分为:通用首部,请求首部,响应首部,实体首部和扩展首部五种;
每个首部结构为 名字+ ":" + 可选空格+字段值+CRLF,但是为了提高可读性,多出来的没行前面至少要有一个空格或者制表如:
HTTP/1.1 200 OKContent-Type: image/gifContent-Length: 8572Server: Test Server Version 1.0
实体主体
长度需要与Content-Length对应;类型需要与Content-Type对应;尤其是在HTTP管道化连接时
方法
GET
过于常见,略
HEAD
如果开发者遵循HTTP/1.1规范,必须实现HEAD。 服务器在响应只返回首部,并且保证与GET返回的首部一致;使用HEAD,可以:
- 不获取自愿的情况下,了解资源的情况,(比如,判断其类型)
- 通过检查状态码,查看某个对象是否存在;
- 测试资源是否被修改了
PUT
向服务器写入文档。由于允许用户对内容进行修改,一般web服务器都要求用密码登陆之后再执行put
常见的案例为: 有些发布系统允许用户创建web页面,并用PUT将其安装到web服务器上;
POST
过于常见,略
TRACE
客户端发其一个请求时,这个请求会穿过防火墙、代理、网关等程序;所以原始请求有可能被修改,TRACE允许客户端在最终将请求发送给服务器时,看看它变成了什么样子;
TRACE请求会在目的服务器端发起一个“环回”诊断,行程最后一站的服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文。可以方便地判断原始报文是否有过修改;
很不幸的是, 网易,w3school.com.cn等都不支持TRACE, 最后用图片吧
OPTIONS
OPTIONS方法请求web服务器告知其支持的个想功能,可以询问服务器通常支持哪些方法,哪些资源有哪些方法;但是很不幸, baidu, qq等都不支持, 还是值接上图吧
DELETE
请求服务器删除URL所指定的资源。但是客户端无法保证删除操作一定会被执行。因为协议允许服务器在不通知客户端的情况下撤销请求
状态码
100 ~ 199
略
200~299
略
400~499
略
500~599
略
300~399
重定向, 如果资源被移走,可发送重定向状态码+一个可选的Location首部。如下图:
首部
通用首部
不管请求或者响应首部,都可使用的首部, 包含了, Connection(下一篇会详细讲)、Date, MIME-Version、以及通用缓存首部
请求首部
用以说明: 是谁或者什么发送请求、请求来源何处、或者客户端的喜好以及能力。常见的由Client-IP, From, Host, Referer, UA-Color, UA-OS, User-Agent等
其中 Accept首部,提供了客户端的喜好和能力:
- Accept:服务器能够发送哪些媒体类型
- Accept-Charset: 可发送的字符集, 字符集标示的是该系统字符的集合
- Accept-Encoding: 可发送的字符编码, 字符编码是说对应的字符集如何转化为机器码存储的方式
- Accept-Language: 可发送的语言
响应首部
- Server 服务器应用程序软件的名称和版本
实体首部
用来描述HTTP报文的负荷。常见的有以下几种:
- 内容首部: content-Encoding, content-Length, content-Type
- 实体缓存首部,以后会详解
0 0
- 从零开始搭建Flask网站之二:http报文
- 从零开始搭建Flask网站之一:HTTP协议之报文
- 从零开始搭建Flask网站之零:从零开始
- 从零开始用 Flask 搭建一个网站(二)
- 从零开始用 Flask 搭建一个网站(一)
- 从零开始用 Flask 搭建一个网站(三)
- 从零开始用 Flask 搭建一个网站(四)
- 网站搭建从零开始(二)服务器空间
- asp.net网站服务器搭建之从零开始
- asp.net网站服务器搭建之从零开始
- 搭建flask网站全过程
- 《图解HTTP》(二)之HTTP报文及状态码
- 从零开始搭建个人网站
- HTTP 之 报文学习
- Http之报文
- Http之报文压缩
- 使用ASP.NET从零开始制作设计网站之二
- 使用ASP.NET从零开始制作设计网站之二
- java中空串 “”!=null..字符串要用equals判等
- KING_U3D学习之Unity播放视频解决方案
- ice 主题好blog
- wxpython学习笔记
- POJ 3061 Subsequence(二分查找 or 尺取法)
- 从零开始搭建Flask网站之二:http报文
- iOS 监听TextField文本值 实现按钮是否可按
- Javascript回顾——第3讲:表单(要熟练掌握)
- linux 关于进程的常用命令
- 深入浅出UML类图
- [Python标准库]contextlib——上下文管理器工具
- javaday-26网络编程
- 保证数据完整性
- 深入解析String#intern