从零开始搭建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
原创粉丝点击