《图解HTTP》笔记与读后感(上)

目录

一.简介

二.了解Web及网络基础

三.简单的HTTP协议

四.HTTP报文内的HTTP信息

五.返回结果的HTTP状态码

六.与HTTP协作的Web服务器

七.HTTP首部


一.简介

《图解HTTP》是一本以图文并茂的方式讲述HTTP协议的书。这本书在2014年出版,已经比较老了,另外就是很多地方讲得很粗略,甚至重难点的地方直接一笔带过,如同完全没讲。我是非常不推荐大家读的。

那既然我读完了,我就归纳总结一下书中的重点知识(不详细讲述为什么,只讲是什么),帮助大家快速掌握,理清思路。

二.了解Web及网络基础

  1. http属于TCP /IP 协议族,TCP/IP协议族包括了应用层,传输层,网络层的各种协议。
  2. 不同的硬件、操作系统之间的通信,所有的这一切都需要一种规划。而我们就把这种规划称为协议(protocol)。
  3. TCP /IP协议族里重要的一点就是分层。TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层和数据链路层。可以理解成一种解耦和单一职责原则
  4. 传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。传输层有两种性质不同的协议:TCP(传输控制协议)和UDP(用户数据报协议)。
  5. 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
  6. 链路层用来处理连接网络的硬件部分。(控制操作系统,硬件的设备驱动等)
  7. 为了传输方便,在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
  8. 在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。
  9. 发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。这种把数据信息包装起来的做法称为封装。
  10. IP地址可以和MAC地址进行配对。IP地址可变换,但**MAC地址基本上不会变更,**根据通信方的IP地址就可以反查出对应的MAC地址。
  11. **[0:0:0:0:0:0:0:0]**这样用方括号括起来的是IPV6地址。

三.简单的HTTP协议

1.HTTP是无状态协议,它不保存状态。为了在业务中保持登录状态,需要Cookie技术。

2.对服务器发起请求可以用一个*****来代替请求URI。

3.方法

  • GET:获取资源;
  • POST:传输实体主体;
  • PUT:传输文件;
  • HEAD:获取报文首部,用于确认URI的有效性及资源更新的日期时间等;
  • DELETE:删除文件,响应返回状态码204 No Content(该文件已从服务器上删除);
  • OPTIONS:询问支持的方法;
  • TRACE:追踪路径,客户端通过TRACE方法可以查询发出去的请求是怎样被加工修改/篡改的(不常用);
  • CONNECT:要求用隧道协议连接代理,CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL (安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。

4.HTTP1.1中,所有的连接默认都是持久连接。持久连接的特点是,只要任意一方没有明确提出断开连接,则保持TCP连接状态。

5.持久连接使得多数请求以管线化方式发送成为可能。也就是不用等待上一个请求的响应就能继续发请求。

6.HTTP是无状态协议。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。

四.HTTP报文内的HTTP信息

  1. HTTP报文本身是由多行(用CR+LF作为换行符)数据构成的字符串文本。
  2. 通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
  3. 内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。
  4. 执行范围请求时,会用到首部字段Range来指定资源的byte范围。例如:Range:bytes=5001-10000 或者 Range:bytes=5001-。针对范围请求,则会返回状态码206 Partial Content 的响应报文。如果服务器无法响应范围请求,则会返回状态码200 OK 和完整的实体内容。
  5. 内容协商会以语言、字符集、编码方式等为基准判断响应的资源。例如请求头里:Accept,Accept-Charset等字段。

五.返回结果的HTTP状态码

1.响应类别有以下5种:

  • 1XX Informational(信息性状态码) 接收的请求正在处理
  • 2XX Success(成功状态码) 请求正常处理完毕
  • 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
  • 4XX Client Error(客户端错误状态码) 服务器无法处理请求
  • 5XX Server Error(服务器错误状态码) 服务器处理请求出错

2.代表性的14个状态码:

  • 200 OK
  • 204 No Content
  • 206 Partial Content
  • 301 Moved Permanently 永久性重定向,这时应该按Location首部字段提示的URI重新保存
  • 302 Found 临时性重定向
  • 303 See Other 与302有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源,这点与302状态码有区别。301、302标准是禁止将POST方法改成GET方法的,但实际使用时大家都会这么做。
  • 304 Not Modified 资源已找到,但未附和条件请求(和重定向没关系)
  • 307 Temporary Redirect 该状态码与302有着相同的含义
  • 400 Bad Request 该状态码表示请求报文中存在语法错误。
  • 401 Unauthorized 该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。
  • 403 Forbidden 该状态码表明对请求资源的访问被服务器拒绝了。
  • 404 Not Found 该状态码表明服务器上无法找到请求的资源。
  • 500 Internal Server Error 表明服务器端在执行请求时发生了错误。
  • 503 Service Unavailable 表明服务器暂时处于超负载或正在停机维护。

六.与HTTP协作的Web服务器

  1. 即时物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以假想已具有多台服务器。也就是台服务器里有多个域名。
  2. 在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI
  3. 代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器。
  4. 使用代理服务器的理由有:利用缓存技术减少网络带宽的流量,组织内部针对特定网络的访问控制,以获取访问日志为主要目的。
  5. 利用网关可以由HTTP请求转化为其他协议通信。
  6. 隧道的目的是确保客户端能与服务器进行安全的通信

七.HTTP首部

1.HTTP首部字段起到传递额外重要信息的作用。

2.端到端首部会转发给请求/响应对应的最终接收目标。

3.逐跳首部只对单次转发有效,会因通过缓存或代理而不再转发。需提供Connection首部字段。

4.逐跳首部:

  • Connection
  • Keep-Alive
  • Proxy-Authenticate
  • Proxy-Authorization
  • Trailer
  • TE
  • Transfer-Encoding
  • Upgrade

5.通用首部字段

  • Cache-Control 操作缓存的工作机制,指令的参数是可选的,多个指令之间通过", "分隔。
复制代码
  Cache-Control:private, max-age=0, no-cache
  • Connection 控制不再转发给代理的首部字段(逐跳首部),管理持久连接,如果想在旧版本的HTTP协议上维持持续连接,则需要指定Connection首部字段的值为Keep-Alive。
  • Date 表明创建HTTP报文的日期和时间。
  • Trailer 会事先说明报文主体后记录了哪些首部字段。该字段可用在HTTP/1.1版本分块传输编码时。
  • Transfer-Encoding 规定了传输报文主体时采用的编码方式。HTTP/1.1的传输编码方式仅对分快传输编码有效。
bash 复制代码
Transfer-Encoding:chunked
  • chunked是"分块的"意思。
  • Upgrade 用于检测HTTP协议及其他协议是否可使用更高的版本进行通信。服务器可用101 Switching Protocols状态码作为响应返回。
  • Via 为了追踪客户端和服务器之间的请求和响应报文的传输路径。
  • Warning 告知用户一些与缓存相关的问题的警告。

6.请求首部字段

  • Accept 通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用type/subtype这种形式,一次指定多种媒体类型。使用q=来额外表示权重值。用分号(;)来进行分隔。q大于等于0小于等于1,默认是1。
  • Accept-Charset 通知服务器用户代理支持的字符集及字符集的相对优先顺序。
  • Accept-Encoding 告知服务器用户代理支持的内容编码及内容编码的优先级顺序。例如gzip编码。
  • Accept-Language 告知服务器用户代理能够处理的自然语言集。
  • Authorization 告知服务器用户代理的认证信息(证书值)。
  • Expect 客户端期望服务器出现的某种特定行为。例如 Expect:100-continue
  • From 告知服务器客户端用户的电子邮件地址。
  • Host 告知服务器,请求的资源所处的互联网主机名和端口号。
  • if-Match 服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。告知服务器匹配资源所用的实体标记(ETag)值。反之,则返回状态码412 Precondition Failed的响应。
  • if-Modified-Since 如果在该字段指定的日期时间后,资源发生了更新,服务器会接受请求。如果请求的资源都没有过更新,则返回状态码304 Not Modified 的响应。
  • if-None-Match 只有在该字段值与Etag值不一致时,可处理该请求。与if-Match首部字段的作用相反。
  • if-Range 告知服务器若指定的if-Range字段值(ETag或者时间)和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之,则返回全体资源。
  • if-Unmodified-Since 与if-Modified-Since相反
  • Max-Forwards 指定可经过的服务器最大数目。
  • Proxy-Authorization 认证行为发生在客户端与代理之间
  • Range 对于只需获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的指定范围。
  • Referer 告知服务器请求的原始资源的URI,也就是是从哪个页面跳转过来的
  • TE 用于传输编码。
  • User-Agent 会将创建请求的浏览器和用户代理名称等信息传给服务器。

7.响应首部字段

  • Accept-Ranges 告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。可处理则为bytes,反之则指定为none。
  • Age 核心作用是标识当前响应报文在缓存节点中已经存放的时间,单位是秒。
  • ETag 告知客户端实体标识。
  • Location 使用首部字段Location可以将响应接收方引导至某个与请求URI位置不同的资源。该字段会配合3XX:Redirection的响应,提供重定向的URI。
  • Proxy-Authenticate 会把代理服务器所要求的认证信息发送给客户端。客户端与服务器之间进行认证时,首部字段WWW-Authorization有着相同的作用。
  • Retry-After 告知客户端应该在多久之后再次发送请求。
  • Server 告知客户端当前服务器上安装的HTTP服务器应用程序的信息。不单单会标出服务器上的软件应用名称,还有可能包括版本号和安装时启用的可选项。
  • Vary 从代理服务器接收到源服务器返回包含Vary指定项的响应之后,若再进行缓存,仅对请求中含有相同Vary指定首部字段的请求返回缓存。即使对相同资源发起请求,但由于Vary指定的首部字段不相同,因此必须要从原服务器重新获取资源。
  • WWW-Authenticate 用于HTTP访问认证。它会告知客户端适用于访问请求URI所指定资源的认证方案和带参数提示的质询。状态码401 Unauthorized响应中,肯定带有首部字段WWW-Authenticate。

7.实体首部字段

  • Allow 通知客户端能够支持Request-URI指定资源的所有HTTP方法。当服务器接收到不支持的HTTP方法时,会以状态码405 Method Not Allowed作为响应返回。与此同时,还会把所有能支持的HTTP方法写入首部字段Allow后返回。
  • Content-Encoding 告知客户端服务器对实体的主体部分选用的内容编码方式。
  • Content-Language 告知客户端,实体主体使用的自然语言(指中文或英文等语言)。
  • Content-Length 实体主体部分的大小。
  • Content-Location 给出与报文主体部分相对应的URI
  • Content-MD5 检查报文主体在传输过程中是否保持完整,以及确认传输到达。
  • Content-Range 告知客户端作为响应返回的实体的哪个部分符合范围请求。字段值以字节为单位,表示当前发送部分及整体实体大小。
  • Content-Type 说明了实体主体内对象的媒体类型。
  • Expires 原服务器响应内的首部字段Expires会将资源失效的日期告知缓存服务器。
  • Last-Modified 表明资源最终修改的时间。

8.为Cookie服务的首部字段

  • 目前使用最广泛的Cookie标准是在网景公司制定的标准上进行扩展的产物。
  • Set-Cookie 服务器告知客户端它的Cookie等信息。NAME=VALUE赋予Cookie的名称和其值(必须项);expires=DATA Cookie的有效期(若不指定则默认为浏览器关闭前为止);path=PATH 将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录);domain=域名 作为Cookie适用对象的域名;Secure 仅在HTTPS安全通信时才会发送Cookie;HttpOnly 加以限制,使Cookie不能被JavaScript脚本攻击。

9.其他首部字段

  • X-Frame-Options 为了防止点击劫持攻击。两个可指定的字段值,DENY :拒绝,SAMEORIGIN:仅同源域名下的页面匹配时许可。能在所有的Web服务器端预先设定好X-Frame-Options字段值是最理想的状态。
  • X-XSS-Protection 响应首部,针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器XSS防护机制的开关。可指定的字段值如下,0:将XSS过滤设置成无效状态;1:将XSS过滤值设置为有效状态。
  • DNT:请求首部,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。0:同意被追踪,1:拒绝被追踪。
  • P3P:(The Platform for Privacy Preferences,在线隐私偏好平台)响应首部,可以让Web网站上的个人隐私变成一种仅供程序可理解的方式,以达到保护用户隐私的目的。
相关推荐
四维碎片3 小时前
QSettings + INI 笔记
笔记·qt·算法
步步为营DotNet3 小时前
深度剖析.NET中IHostedService:后台服务管理的关键组件
服务器·网络·.net
zzcufo3 小时前
多邻国第5阶段17-18学习笔记
笔记·学习
BlackWolfSky4 小时前
鸿蒙中级课程笔记4—应用程序框架进阶1—Stage模型应用组成结构、UIAbility启动模式、启动应用内UIAbility
笔记·华为·harmonyos
Ares-Wang4 小时前
网络》》路由引入 、路由控制 》》路由策略 route-policy 、Filter-Policy(过滤策略)
网络·智能路由器
中屹指纹浏览器4 小时前
指纹浏览器性能优化实操——多实例并发与资源占用管控
经验分享·笔记
了一梨5 小时前
SQLite3学习笔记5:INSERT(写)+ SELECT(读)数据(C API)
笔记·学习·sqlite
Jia ming5 小时前
虚拟地址与物理地址:64位VS48位
网络
DARLING Zero two♡5 小时前
【计算机网络】简学深悟启示录:http
网络协议·计算机网络·http
jrlong5 小时前
DataWhale大模型基础与量化微调task5学习笔记(第 3 章:大模型训练与量化_模型量化实战)
笔记·学习