其他分享
首页 > 其他分享> > 《图解HTTP》读后笔记

《图解HTTP》读后笔记

作者:互联网

图解HTTP读后笔记


第一次写博文,有错误请指教,感谢!

第一章 了解Web以及网络基础

TCP的三次握手

在这里插入图片描述

SYN – synchronize

ACK – acknowledgement

负责域名解析的DNS服务

DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。

URL和URI

URI:统一资源标识符。用字符串标识某一互联网资源,用某个协议方案表示资源的定位标识符。

URL:统一资源定位符。表示资源的地点(互联网上所处的位置)。

URL是URI的子集。

来源于网络的解释:

URI包括URL和URN两个类别,URL是URI的子集,所以URL一定是URI,而URI不一定是URL

URI = Universal Resource Identifier 统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。
URL = Universal Resource Locator 统一资源定位符,一种定位资源的主要访问机制的字符串,一个标准的URL必须包括:protocol、host、port、path、parameter、anchor。
URN = Universal Resource Name 统一资源名称,通过特定命名空间中的唯一名称或ID来标识资源。

url_uri_diff

举个例子:个人的身份证号就是URN,个人的家庭地址就是URL,URN可以唯一标识一个人,而URL可以告诉邮递员怎么把货送到你手里。

第二章 简单的HTTP协议

http是不保存状态的协议

Http协议自身不具备保存之前发送过的请求和响应的功能。

HTTP方法

GET&POST常用。

PUT不常用,用来传输文件, 就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。 由于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全问题,所以一般Web网站不采用该方法

DELETE也不常用,存在和PUT一样的安全问题。

HEAD请求和GET类似,只是不返回响应体。

OPTIONS方法 用来查询针对请求URI指定的资源支持的方法。

TRACE方法是 让Web服务器端将之前的请求通信环回给客户端的方法,不常用。

CONNECT方法 要求用隧道协议连接代理。

HTTP/1.1持久连接

特点: 将任意一端没有明确提出断开,连接则保持TCP连接状态。

COOKIE实现状态管理

在这里插入图片描述

上图中响应中添加的Cookie是在响应体里面Set-Cookie键对应的值里面的。

在这里插入图片描述

第三章 HTTP报文内的HTTP信息

Http请求空行

CR+LF:CR(Carriage Return, 回车符:16进制0x0d)和LF(Line Feed, 换行符: 16进制0x0a)

Http报文

是http通信中的基本单位,由八个位字节流组成。

支持发送多种数据的多部分对象集合

采用了MIME机制(多用途因特网邮件扩展)

与首部字段content-type有关

获取部分内容的范围请求

用到首部字段Range

在这里插入图片描述

针对范围请求,响应会返回状态码为206的响应报文。

补充:对于多重范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文。如果服务器无法响应范围请求,则会返回状态码200 OK和完整的实体内容。

内容协商

内容协商机制,是指客户端和服务器端就相应的资源内容进行交涉,然后提供给客户端最为适合的资源内容,协商会议响应资源的语言,字符及编码方式等作为判断的基准。

相关的首部字段有:

Accept, Accept-Charset, Acccept-Encoding, Accept-Language, Content-Language

三种协商方式:

第四章 返回结果的HTTP状态

状态码

状态码如 200 OK,以3位数字和原因短语组成。

在这里插入图片描述

2XX成功

200 OK

表示从客户端发来的请求在服务器端被正常处理了

204 No Content

该状态码表示服务器接收的请求已经成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。

一般在只需要往服务器发送信息,而客户端不需要发送新信息内容的情况下使用。

206 Partial Content

该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。

3XX 重定向

301 Moved Permanently

永久性重定向。该状态码表示请求的资源已经被分配了新的URI,以后应该使用资源现所指的URI。

302 Found

临时性重定向。该状态码表示请求的的资源已经分配了新的URI,希望用户(本次)能使用新的URI访问。

303 See Other

该状态码表示,由于请求对应的资源存在着另一个URI,应该使用GET方法,定向获取请求的资源。303和302有着相同的功能,但是303明确GET方法。

当301、302、303响应状态码返回时, 几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送。

301、302标准是禁止将POST方法改成GET方法的,但是实际使用时大家都会这么做。

304 Not Modified

该状态码表示客户端发送附带条件的请求时,服务器允许请求访问资源,但是未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304虽然被划分到3XX中,但是和重定向并没有什么关系。

附带条件的请求:采用GET方法的请求报文中包含If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since中的任一首部。

307 Temporary Redirect

临时重定向。与302有相同的含义。307会遵守浏览器规范,不会从POST编程GET。

4XX 客户端错误

400 Bad Request

该状态码表示请求报文中存在语法错误。

401 Unauthorized

在这里插入图片描述

该状态码表示发送请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。

返回含有401的响应必须包含一个合适于被请求资源的WWW-Authenticate 首部用以质询(chanllenge)用户信息。当浏览器初次接收到401响应,会弹出认证用的对话窗口。

403 Forbidden

该状态码表明对请求资源的访问被服务器拒绝了。(拒绝访问)

404 Not Found

该状态码表明服务器上无法找到请求的资源。(找不到资源)

5XX 服务器错误

500 Internal Server Error

该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障。

503 Service Unavailable

该状态码表明服务暂时处于超负载或正在进行停机维护,现在无法处理请求。

第五章 HTTP协作的Web服务器

用单台虚拟机实现多个域名

物理层面只有一台服务器,但是只要使用虚拟主机的功能,则可以假想成已经有多台服务器。

若两个域名同时部署在同一个服务器上(相同的ip地址),使用DNS服务解析域名之后,两者的访问IP是相同的,因此要区分的时候必须在Host首部内完整指定主机名或域名的URI。

通信数据转发程序

代理

代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求,并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

网关

网关是转发其他服务器通信数据的服务器,接收从客户端发送过来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。

在这里插入图片描述

利用网关可以由HTTP请求转化为其他通信协议通信

因此利用网关能提高通信的安全性

隧道

隧道是在相隔很远的客户端和服务器之间进行中转,并保持通信连接的应用程序。

目的是建立安全的通信,例如SSL等加密手段进行通信,隧道本身是透明的,客户端不用在意隧道的存在。

保存资源的缓存

缓存可以避免多次从源服务器转发资源

缓存具有有效期限

分为客户端缓存和缓存服务器缓存

第六章 HTTP首部

在这里插入图片描述

在这里插入图片描述

HTTP首部字段

第七章 确保Web安全的HTTPS(重点)

Http的缺点(重点)

Http+加密+认证+完整性验证 = Https

Https不是应用层的新协议,而是Http通信接口部分用SSL和TLS协议代替而已。

SSL是独立于HTTP的协议,不光是HTTP,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。

共享密钥加密(对称密钥加密)

加密和解密用一个密钥

公开密钥加密

非对称加密,私钥和公钥

Https采用混合加密机制

在交换密钥的环节使用公开密钥的加密方式,之后建立连接后交换报文阶段使用共享密钥加密。

证明非对称加密中来自服务器的公钥正确性的证书

数字证书认证机构(CA)

确认派发公钥流程(重要)

Http通信流程(面试必问)

  1. 客户端向服务器发送请求,连接到服务器的443接口,发送的信息是随机值1客户端支持的加密算法SSL版本信息等
  2. 服务器接收到信息后响应握手信息,包括随机数2和匹配好的协商加密算法等;
  3. 随即服务器给客户端回送的第二个报文是数字证书(上面流程中说过的);
  4. 客户端解析证书,这部分工作由TLS来完成,验证证书的时效,机构等信息确保拿到客户端的公钥;
  5. 客户端认证证书通过后,生成随机数3,用服务器端公钥加密组装成会话密钥;
  6. 传送加密信息给服务器端,服务器私钥解密拿到随机数3,和之前的随机数2和1组装成会话密钥,作为后续共享密钥通信的密钥;
  7. 客户端通过会话密钥加密发送一条消息给服务端,主要验证服务器是否能正常接收解密;
  8. 服务器成功接收解密后也会通过会话密钥加密发送一条消息回传给客户端,如果客户端接收解密成功,则SSL建立完成。

SSL速度慢吗?

Https比Http慢2~100倍

SSL的慢分为两种

  1. 通信慢
  2. 由于SSL必须进行加密处理,会导致大量消耗内存和CPU等资源,导致处理速度变慢

为什么不一直使用HTTPS?

第八章 确认访问用户身份的认证

Http/1.1使用的认证方式

BASIC 认证

在这里插入图片描述

缺点:Base64编码不是加密,相当于明文传输,安全性不高,一般浏览器无法实现认证注销操作,不灵活,所以并不常用;

DIGEST 认证

采用质询/响应方式(challenge/response)

在这里插入图片描述

缺点:认证等级虽然比BASIC认证高,可以防止明文窃听,但是并不存在防止用户伪装的保护机制;

SSL客户端认证

在这里插入图片描述在这里插入图片描述在这里插入图片描述

缺点:CA costs a lot.

基于表单认证

认证多半是表单认证。

一般使用Cookie来管理会话Session。在这里插入图片描述

第九章 基于HTTP的功能追加

HTTP的瓶颈

  1. 一条连接上只可以发送一个请求。
  2. 请求只能从客户端开始。客户端不可以接收除响应外的指令。
  3. 请求/响应的首部未经压缩就发送。首部信息越多延迟越大。
  4. 可以选择数据压缩格式。非强制压缩发送

HTTP/2.0和1.1区别(面试题)

转载自此处,点击跳转

  1. HTTP/2.0采用二进制格式而非文本格式
  1. HTTP/2.0是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
  1. 使用报头压缩,HTTP/2.0降低了开销
  1. HTTP/2.0让服务器可以将响应主动“推送”到客户端缓存中

后续章节

是构建Web内容和Web攻击相关的知识,没有细看。

标签:HTTP,请求,报文,认证,服务器,图解,读后,客户端
来源: https://blog.csdn.net/qq_40651356/article/details/111773206