简明HTTP协议

简明HTTP协议

简明HTTP协议WEB与HTTP协议背景WEB基础——3项重要的技术WEB常用的结构组件——5项重要的组件HTTP的发展——协议版本HTTP协议简介HTTP传输过程浏览器访问资源的过程HTTP报文格式结构报文结构请求起始行与请求方法响应起始行与响应状态码首部(header)请求首部响应首部实体首部主体(body)更多的主题TCP/IP协议簇无状态HTTP的解决方案网络攻防与HTTPS参考书目

WEB与HTTP协议

背景

1989 年 3 月, CERN(欧洲核子研究组织)的蒂姆 • 伯纳斯 - 李(Tim BernersLee)博士提出了一种能让远隔两地的研究者们共享知识的设想。最初设想的基本理念是:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的 WWW(World Wide Web,万维网),这就是WEB的雏形。每一项重大的发明后,就会带来巨大的市场和激烈的竞争。自WEB发明后,由于用户需要使用浏览器访问WEB资源,微软公司、网景通信公司、Mozilla 基金会推出自家的浏览器抢占市场。浏览器供应商之间的竞争导致程序员在写 HTML 页面时,必须考虑各种各样的兼容性。不过事有两面,对用户而言可供选择的浏览器也很多。现在市面上主流的浏览器有Chrome、Internet Explorer 、Firefox 、Netscape Navigator 、Opera、Safari

WEB基础——3项重要的技术

  • HTML 作为页面的文本标记语言的 HTML(HyperText Markup Language,超文本标记语言),目前HTML语言已发展到HTML5,未来我将写一篇简明介绍HTML5的文章。

  • URI 指定文档所在地址的 URI(Uniform Resource Identifier,统一资源标识符),URI分为URL和URN两种,可以看看我写的简明URI。

  • HTTP 作为文档传递协议的 HTTP(HyperText Transfer Protocol,超文本传输协议),这里可以将协议理解为一种大家约定好的规则;现在 HTTP 协议从0.9已经发展到2.0,并且已经超出了 Web 这个框架的局限,被运用到各种场景中。

WEB常用的结构组件——5项重要的组件

  • 代理,HTTP代理服务器位于客户端与服务器之间,是实现WEB安全、应用集成、性能优化的重要模块。由于WEB流量经过代理服务器转发,因此相当于一个中介,由于所有WEB流量内容都会经过代理,于是代理服务器可以通过内容过滤、转发等手段实现WEB安全保障、应用集成和优化。

  • 缓存,其实也是一种特殊的HTTP代理服务器,一般将代理过程中传送的文档、数据保存起来,当客户端再次访问可以直接交付给客户端,减少了网络中转和服务器压力。

  • 网关,是一类特殊服务器,主要解决的协议适配与转换的问题。例如浏览器请求文件时,当客户机以HTTP协议访问网关时,网关可以将协议转换为FTP协议去访问FTP服务器,实现静默无感知的协议转换。

  • 隧道,用于保证客户机和服务器全通讯,常用与HTTPS协议中的SSL安全传输。

  • 客户端代理,浏览器就是最常见的客户端代理软件,同时网络爬虫、无头浏览器等也属于客户端代理。

HTTP的发展——协议版本

  • HTTP 0.9 这个协议有很多严重的设计缺陷,只应该用于与老客户端的交互。HTTP/0.9只支持 GET 方法,不支持多媒体内容的 MIME 类型、各种HTTP首部,或者版本号。HTTP/0.9定义的初衷是为了获取简单的HTML对象,它很快就被HTTP/1.0取代了。

  • HTTP 1.0 虽说是初期标准,但该协议标准至今仍被广泛使用在服务器端,它集合了一系列最佳实践。正式作为标准被公布是在 1996 年的 5 月,版本被命名为 HTTP/1.0,并记载于 RFC1945。

  • HTTP/1.1 是目前主流的 HTTP 协议版本。包括许多特性,包括持久的Keep-alive连接,虚拟主机支持、代理连接支持等。当初的标准是 RFC2068,之后发布的修订版 RFC2616 就是当前的最新版本,于1997年公布。

  • HTTP/2.0 新一代 也成为了HTTP NG,NG是Next Generation的缩写。它关注性能的大幅提升以及逻辑远程执行框架,不过要达到较高的使用覆盖率,仍需假以时日。

HTTP协议简介

HTTP传输过程

一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成了一个HTTP事务 请求和响应都被称为HTTP报文(HTTPmessage),这是一种格式化后的数据块。报文流入源端服务器,工作完成之后,会流回用户的客户端.

浏览器访问资源的过程

当我们使用浏览器访问一个网站时,会使用到DNS协议查询主机IP信息,传输的数据经过由高层向下层协议流动,由下层TCP协议将数据包将按大小拆分为多个片段并控制数据包的完整性,由IP协议进行数据传输,当到达服务器资源后又会逐层解包合并。 通过层次划分与抽象,高层协议不需要关心底层逻辑,简化了复杂的通讯逻辑。层次化、模块化是计算机架构中的最常用和最有效的思维。

HTTP报文格式结构

报文结构

HTTP报文是按协议格式进行组装的。无论是客户端的请求还是服务器的响应都是一条HTTP报文。它们由三个部分组成:分别是起始行、头、体。具体点就是:对报文进行描述的起始行(start line)、包含属性的首部(header)块、包含数据的主体(body)部分。

起始行(start line)

所有的HTTP报文都以一个起始行作为开始。请求报文的起始行说明了要做些什么。响应报文的起始行说明发生了什么。

请求起始行与请求方法

请求起始行或称为请求行,包含了一个方法和一个请求 URL,这个方法描述了服务器应该执行的操作,请求 URL描述了要对哪个资源执行这个方法。请求行中还包含HTTP的版本,用来告知服务器,客户端使用的是哪种HTTP。请求方法为 GET,请求 URL为/test/hi-there.txt,版本为HTTP/1.1。

HTTP规范中的7种请求方法,以及其含义,见下表。

  • GET 是最常用的方法。通常用于请求服务器发送某个资源。。

  • HEAD 方法与 GET 方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查,例如查看对象是否存在或者被修改。

  • PUT 方法会向服务器写入文档。有些发布系统允许用户创建Web页面,并用 PUT 直接将其安装到Web服务器上去。

  • POST 方法起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方。

  • TRACE 方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子。用于诊断工具,可以用来查看代理和其他应用程序对用户请求所产生效果请求会在目的服务器端发起一个诊断。服务器会弹回一条响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间HTTP应用程序组成的链路上,原始报文是否,以及如何被毁坏或修改过。

  • OPTIONS 方法请求Web服务器告知其支持的各种功能。

  • DELETE 方法所做的事情就是请服务器删除请求 URL所指定的资源。但是,客户端应用程序无法保证删除操作一定会被执行。

响应起始行与响应状态码

称为响应行。响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端。包含了响应报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。图中,HTTP版本为HTTP/1.0,状态码为200(表示成功),原因短语为 OK,表示文档已经被成功返回了。状态码和原因短语是成对出现的。原因短语是状态码的可读版本,应用程序开发者将其传送给用户,用以说明在请求期间发生了什么情况。

100-199是信息状态码,其复杂性和感知价值存在一些争议。客户端应用程序只有在避免向服务器发送一个服务器无法处理或使用的大实体时,发送的HTTP头会带有一个值为100Continue 的Expect首部的请求,服务器会用100Continue 响应。

200-299是成功状态码,分别对应于不同类型的请求。

300~399是重定向状态码,告知客户端使用资源已经被专用或替代,请客户端移步到响应报文内指定的URL去。浏览器接收后会转入新的URL。302、303和307状态码之间存在一些交叉,HTTP/1.1规范指出,对于HTTP/1.1客户端,用307状态码取代302状态码来进行临时重定向。

400-499是客户端错误状态码,大部分客户端错误都是由浏览器来处理的,甚至不会打扰到你。只有少量错误,比如404,还是会穿过浏览器来到用户面前。

500-599是服务器错误状态码,客户端发送了有效请求,服务器自身却出错了。比如服务器内存溢出。

首部(header)

跟在起始行后面的就是零个、一个或多个HTTP首部字段。注意首部可以有零个或多个字段,每个字段都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个 CRLF。首部是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。首部也同样分为请求首部和响应首部。

请求首部

用于说明是谁或什么在发送请求、请求源自何处,或者客户端的喜好及能力。比如Accept首部就用来告知服务器客户端会接受与其请求相符的文件类型。

请求首部可以增加条件约束,要求服务器响应前确保条件约束为真。 为增强安全性,请求首部会增加身份认证信息,以及增加部分代理信息。这部分和Cookie、Session会话相关,需要进一步讨论。 W

响应首部

为客户端提供了一些额外信息,比如谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令。这些首部有助于客户端处理响应。

以及面向多种语言支撑的协商首部。 以及面向安全响应首部。 通用首部 既可以出现在请求报文中,也可以出现在响应报文中。比如Date:Tue,3Oct197402:16:00GMT

实体首部

描述对象类型的长度和内容,与实体内容有关的特定信息,以及处理它所需的其他有用信息,以及对资源使用的各种有效的请求方法,实体首部可以告知报文的接收者它在对什么进行处理,以及缓存信息。

主体(body)

HTTP报文的第三部分是可选的实体主体部分。实体的主体是HTTP报文的负荷。就是HTTP要传输的内容。HTTP报文可以承载很多类型的数字数据:图片、视频、HTML文档、软件应用程序、信用卡事务、电子邮件等。

更多的主题

TCP/IP协议簇

HTTP协议在传输中需要用到各种底层协议。因此要弄清全流程,需要对TCP/IP协议簇进一步深入了解。 TCP/IP 协议簇是互联网相关的各类协议簇的总称,一般分为4层或者5层,分为应用层、传输层、网络层、网络接口与链路层,是对ISO/OSI模型的简化和现实标准。HTTP协议是TCP/IP 协议簇的一个子集,HTTP协议依赖下层的TCP协议和IP协议来实现通讯,这2个协议是协议簇的核心,TCP协议负责可靠传输,IP协议负责将数据包传输到目的地。因此我们最好在以后大致了解TCP/IP 协议簇,具体可以看我写的另一篇简明TCP/IP 协议。

无状态HTTP的解决方案

HTTP是无状态的,但是在访问的时候需要保持会话连接,那么HTTP有多种实现方式,包括大家熟悉的Cookie和Session。

网络攻防与HTTPS

HTTP传输过程是明文传输,且对安全性的考虑很少,HTTPS 就是HTTP+加密+认证+完整性保护

参考书目

《图灵程序设计丛书——图解HTTP》

《HTTP权威指南》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值