图解HTTP 读书笔记 上 HTTP协议相关
来源:互联网 发布:数据采集模块 编辑:程序博客网 时间:2024/05/20 07:58
图解HTTP 读书笔记 HTTP协议相关
图解HTTP这本书,我这里准备分两篇来讲,这篇是上篇,涉及到书中的ch1**了解Web及网络基础、ch2简单的HTTP协议、ch3**HTTP报文内的HTTP信息,ch4**HTTP状态码,ch6**HTTP首部这五章内容,主要讲Web网页和HTTP的一些基本概念以及HTTP报文的有关信息。
下篇则涉及ch5**Web服务器、ch7**HTTPS、ch8**用户身份认证和ch10构建Web内容技术**;也就是有关Web服务器、Web网页和Web安全的内容。
一 Web基础
Web(World Wide Web):即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。
Web构建的基本理念:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的WWW。
Web构建技术:
1. HTML:把SGML作为页面的文本标记语言
2. HTTP:文档传输协议
3. URL:指定文档所在位置
以上3项技术分别代表了通信内容——Web网页;通信方式——HTTP协议;通信地址——URL。此外还有通信内容提供方——Web服务器,以及通讯内容获取方——客户端。这五个方面,就是Web技术的主要内容。
Web服务器和Web页面是下一篇的内容,Web客户端这里不讲。HTTP协议是下面的重要内容,这里写简单讲下URL。
1.1 URL
URI:URL是URI的子集。URI(Uniform Resource Identifier,同一资源标识符)通过字符串标识任一互联网资源。URI可视为由某个协议方案表示的资源的定位标识符。URI支持http、ftp、telnet等30余种协议方案。
URL:用字符串标识互联网资源的地址,Uniform Resource Locator,同一资源定位符。
绝对URI格式:
https://item.taobao.com/item.htm?spm=a21ig.11052422.944389.2.74709cb1YKlqaV&id=530476331966
https://user:pass@item.taobao.com:80/item.htm?spm=a21ig.11052422.944389.2.74709cb1YKlqaV#ch1
上面给出了两个网址,第一个是真实淘宝地址,第二个是在第一个基础上经过添加删减用于说明的地址。绝对URI格式从左到右可分为7个部分:
1.协议方案名:即https://,注意格式
2. 登录信息(认证):可选项,见二中的user:pass@
3. 服务器地址:即item.taobao.com,可为网址,也可为IP地址。
4. 服务器端口号:可选项,忽略时使用默认端口号
5. 带层次的文件路径:见二中的item.htm?,指定服务器上的文件路径来定位特指文件
6. 查询字符串:见spm=。。。&。。。,查询已制定的文件路径内的资源
7. 片段标识符:见二中的#ch1,用以标识已获取资源中的子资源
二 HTTP基础
HTTP协议:HTTP协议位于计算机网络分层的最上层——应用层。用以实现客户端和服务器之间的通信。有关整个计算机网络的可以参考图解TCP/IP这本书,也可以看下我的读后感权当解闷。
客户端:请求访问文本或图像等资源的一端,客户端程序即为Web浏览器
服务端:提供资源响应的一端即为服务端。
需要说明的是,一台机器既可以是客户端也可以是服务端。甚至两者之间关系可以互换。但是在一条确定通信线路上,客户端和服务端的身份是确定的。
2.1 通过HTTP进行通信的完整流程
在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:
1. 建立TCP连接:
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。
2. Web浏览器向Web服务器发送请求命令
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:
GET/ sample/hello.jsp HTTP/1.1
3. Web浏览器发送请求头信息
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
4. Web服务器应答
客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。
5. Web服务器发送应答头信息
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
6. Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
7. Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,一次请求对应一次响应。在HTTP1.1中引入持久连接和管程化以实现更高效地通信。在浏览器或者服务器在其头信息加入这行代码Connection:keep-alive
即可。
注:本小节参考自参考资料2
2.2 HTTP协议缺陷与对应解决
1. 无状态:HTTP属于无状态协议,其协议本身对于发送过的请求和响应都不做持久化处理。现在一般是通过引入Cookie技术实现状态管理:Cookie根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。在下次通信时,客户端自动在请求报文中加入Cookie值再发送过去。这样服务器根据其服务器上保存的记录可以得知状态信息。
2. 单次连接:由上节的HTTP通信过程可以看出,早期的HTTP通信设计是每一次通信就要进行一次TCP连接到断开的完整过程。考虑到现在通信量远远大于之前,这样做会异常耗时。现在的HTTP协议则通过持久连接——在明确提出断开TCP请求前保持连接和管线化——不等下次响应直接发送下一个请求来大大提高传输速率。
3. 安全性:HTTP安全性较低,通信使用明文、没有身份验证、报文完整性无法验证,总体上有着很大的安全隐患。现在一般是使用HTTPS来实现安全可靠的Web通信,在下一篇进行讲解。
三 HTTP报文
本节讲HTTP通信的细节部分——HTTP报文。根据2.1节可知,在HTTP通信的过程中,是通过客户端发出请求,服务器端对请求进行响应的方式来实现通信的。其中,请求和响应都是以报文的形式实现的,分别对应请求报文和响应报文。
本节的内容就是HTTP的请求报文和响应报文的结构分析和各部分详细说明。
3.1 报文结构
HTTP报文可大致分为报文首部和报文主体两部分,中间用空行(回车+换行)分隔。通常不一定要有报文主体。
3.2 请求报文
请求报文的结构如上图所述。其中,报文首部由请求行和请求头部构成。报文首部和请求正文被空行分开。
请求行:请求行包括三个参数:请求方法,URL和协议版本。其中,考虑到请求头部中一定会有Host首部字段来标识地址,URL一般可忽略。协议版本一般为HTTP/1.1。请求方法由八个,包括了客户端能向服务器发出的所有方法申请。请求行示例如下:
POST /form/entry HTTP/1.1
GET / HTTP/1.1 //URL忽略时需要以/代替
HTTP/1.1中可用的8个请求方法列表:
首部字段(请求头部)可分为四种,其中请求报文中涉及其中三种:请求首部字段、通用首部字段和实体首部字段。首部字段由首部字段名和字段值构成。结构如下:
首部字段名:字段值
通用首部字段
通用首部字段,顾名思义,是指请求报文和响应报文中都会使用的首部,共有9种。
HTTP通用首部字段列表:
请求首部字段
通用首部字段,顾名思义,是指从客户端向服务端发送请求报文时使用的首部。补充了请求的附加信息、客户端信息、响应内容相关优先级等,共19个。
HTTP请求首部字段列表:
实体首部字段
实体首部字段,针对请求报文和响应报文的实体部分使用的报文。补充与实体有关的信息,共10个。
HTTP实体首部字段列表:
3.3 响应报文
请求报文的结构如上图所述。其中状态行由协议版本和状态码部分组成。状态行示例如下:
HTTP/1.1 200 OK
状态码的职责是当客户端向服务端发送请求时,告知返回的请求结果。状态码由3位数字和原因短语组成。数字的第一位指定响应类别,共分5类。状态码一共有大约60余种,常用的14种。
HTTP响应报文状态码分类:
HTTP响应报文常用状态码列表:
响应报文也涉及首部字段其中三种:响应首部字段、通用首部字段和实体首部字段。其中,后两种在上一节已经说过,这里再说下响应首部字段。
响应首部字段补充了响应的附加信息,也会要求客户端附加额外的内容信息,有9种。
HTTP响应首部字段列表:
有关HTTP报文的资料有很多,这里只简单介绍一下,详细信息可以看参考文献5,6和8.
四 HTTP传输
4.1 传输编码
通过在传输时编码,能有效地处理大量的方法请求,提高传输速率。但是,编码的操作需要计算机完成,会消耗一定的CPU计算资源。
内容编码:由服务器进行编码,客户端接收并解码。编码方式有gzip、compress、deflate等。
分块传输编码:在传输大容量数据时,将数据分隔成多块,使Web浏览器逐步显示页面。
4.2 传输多种类型数据
HTML采用了多部分对象集合的方法,在报文中也可含多类型实体,涉及内容首部字段的Content-type。
4.3 获取内容的范围请求
涉及请求首部字段的Range。
参考资料
1. 图解HTTP
2. 一次完整的HTTP请求所经历的7个步骤
3. Http和TCP通信流程解析
4. 究竟什么是HTTP连接
5. HTTP请求头详解
6. HTTP头部信息解释分析(详细整理)
7. web必知必会——图解HTTP(上)
8.HTTP请求、响应报文格式
阅读全文