图解http读书笔记

以前对HTTP协议一知半解,一直不清楚前端需要对于HTTP了解到什么程度,知道接触的东西多了,对于性能优化、服务端的配合和学习中也渐渐了解到了HTTP基础的重要性,看了一些大神对HTTP书籍的推荐,也就找了这本《图解HTTP》来学习一些基础,对于这本书来说,每页都有一些很生动的配图,阅读起来不会像理论书籍那么的枯燥,配图都画的很有意思,值得一看,下面是我的一些读书笔记,也不算是笔记吧,只是摘出了我觉得的重点。

第一章 了解web及网络基础

    HTTP的基础知识 超文本传输协议
    http诞生→发展,各版本的区别
    *网络基础 TCP/IP
        TCP/IP协议族,HTTP协议是属于它内部的一个子集
        TCP/IP协议族按层次分为:
            应用层:FTP、DNS、HTTP等
            传输层:TCP、UDP
            网络层:IP 用来处理网络上流动的数据包
            数据链路层:连接网络的硬件
        分层的好处:更前面模块化的意义相同,每个分层之需要处理自己的工作相应该层面的变化,让设计变得更简单;
        TCP协议:
            将大块数据分割成以报文段为单位的数据包进行管理,使用三次握手的策略确认数据最终是否送达到对方;
            三次握手:发送端首先发送一个带有SYN标志的数据包给接收端,接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后发送端再回传一个带ACK标志的数据包,代表握手结束。
        域名解析的DNS服务:属于应用层的协议,提供域名到IP地址之间的解析服务;
 

第二章 简单的HTTP协议

    请求报文格式:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成。
    响应报文格式:由协议版本、状态码、用以解释状态码的原因短语,可选响应首部字段以及实体主体构成。
    HTTP是不保持状态的协议(无状态协议):对发送过的请求或响应不做持久化处理。不保留之前一切的请求或响应报文信息;
    使用cookie技术可以实现期望的保持状态功能;
    HTTP方法:
        GET:获取资源
        POST:传输实体主体
        PUT:传输文件(不带验证机制,存在安全性问题,一般不适用)
        HEAD:获得报文首部
        DELETE:删除文件和PUT一样存在安全问题
        OPTIONS:询问支持的方法
        TRACE:追踪路径
        CONNECT:要求用隧道协议连接代理
    持久连接节省通信量: 一个页面需要请求许多的资源,如果每个请求都需要TCP连接建立和端口会产生大量的通信开销;
        解决方式:持久连接(HTTP keep-alive):只要任意一端没有明确提出断开连接,则保持TCP连接状态;
                            好处:减少TCP连接的重复建立和断开所造成的开销,减轻服务器的负载,提高页面显示速度
                            http1.0所有的连接默认都是持久连接
    管线化:类似于多线程,无需等待响应亦可直接发送下一个请求,同时并行发送多个请求;
 
第三章:HTTP报文内的HTTP信息
    报文结构:报文首部 + 空行 + 报文主体
    通过编码提升传输速率:
        1、压缩传输内容编码:服务端压缩 → 客户端解码(gzip、compress、deflate、identity)
        2、分割发送的分块传输编码
        3、获取部分内容的范围请求 请求头部 Range: bytes = 5000-10000 指定资源的byte范围
 

第四章:返回结果的HTTP状态码

  类别     原因短语    
1xx informational(信息性状态码) 接收的请求正在处理    
2xx success(成功状态码    ) 请求正常处理完毕
200 OK 请求被正常处理了
204 No Content 请求已成功处理,但返回的响应报文不含实体的主体部分
206 Partial Content 客户端使用了范围请求,服务端成功执行了部分GET请求
3xx redirection(重定向状态码) 需要进行附加操作以完成请求
301 Moved Permanently     永久重定向,请求的资源已被分配了新的URI,以后应使用新的URI
302 Found     临时重定向,请求的资源已被分配了新的URI,希望(本次)使用新URI访问
303 See Other     由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源(与302相比,明确应使用GET方法)
304 Not Modified 客户端方式附带条件请求,服务端运行请求访问资源,但因发生请求未满足条件的情况,直接返回304(服务端资源未改变,可使用客户端未过期的缓存)
307 Temporary Redirect     临时重定向,与302相同,307遵照浏览器标准,不会从POST变成GET
4xx client error(客户端错误状态码) 服务端无法处理请求
400 Bad Request 请求报文中存在语法错误
401 Unauthorized     发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息,若之前已进行1次请求,则表示用户认证失败
403 Forbidden 对请求资源的访问被服务器拒绝了
404 Not Found 服务器上无法找到请求的资源,也可以在服务器端拒绝请求且不说明理由时使用
5xx server error(服务端错误状态码) 服务端处理请求出错
500 Internal Server Error 服务器端在执行请求时发生了错误
503 Service Unavailable     服务器暂时处于超负载或正在进行停机维护,现在无法处理请求

第五章:与HTTP协作的web服务器

    用单台虚拟主机实现多个域名:虚拟主机可以寄存多个不同主机名和域名的web网站,因此在发送HTTP请求时,必须在Host首部内完整制定主机名或域名的URI。
    通信数据转发的应用程序:代理、网关、隧道;
        代理:中间人,对请求和响应转发;不改变请求URI,每次转发会追加写入Via首部信息
        网关:接受请求,转发通信数据,如果自己拥有资源就能像源服务器一样对请求进行处理。
        隧道:建立一条与其他服务器的通信线路,使用SSL等加密手段进行通信。隧道目的是确保客户端与服务端进行安全的通信
    资源的缓存:减少对源服务器的访问,节省通信流量和通信时间;
    缓存的有效期限
 


第6章 HTTP报文首部

分为 请求报文  和 相应报文
请求报文:请求行、请求首部字段、通用首部字段、实体首部字段
响应报文:状态行、响应首部字段、通用首部字段、实体首部字段
 
首部字段的结构:  字段名:字段值
 
4种http首部字段类型:
通用首部字段、实体首部字段(请求报文和响应报文都会使用的首部)
请求首部字段
响应首部字段
 
非http/1.1 首部字段:
47种,常用的: Cookie、Set-Cookie和Content-Disposition等
 
HTTP首部字段 分为两种类型:
端到端首部 End-to-end Header
该类型的首部会转发给请求或响应对应的最终接受目标,且必须保存在由缓存生产的响应中,另外规定他必须被转发;
逐跳首部 Hop-by-hop Header
该类型的首部只对单次转发有效,会因通过缓存或代理而不再转发;HTTP/1.1和之后版本中,如果使用该类型的首部,需要提供Connection首部字段
 
属于逐跳首部的有: Connection、Keep-Alive 、Proxy-Authenticate、 Proxy-Authorization、Trailer、TE、Transfer-Encoding、 Upgrade
不属于以上首部的,都为端到端首部类型;
 
通用首部字段:
1、Cache-control:操作缓存的工作机制;
指令参数可选多个,用 , 分割;
    public
    private
    no-cache
    no-store
    s-maxage
    max-age
    min-fresh
    max-stale
    only-if-cached
    must-revalidate
    proxy-revalidate
    no-transform
    扩展: 通过cache-extension标记(token),可以扩展Cache-Control首部字段内的指令
 
2、Connection:用于控制不再转发给代理的首部字段和管理持久连接;
    Connection: 不再转发的首部字段名;
    Connection:close  断开连接
 
3、Date:表明创建HTTP报名的日期和时间
    多种格式
 
4、Pragma:HTTP/1.1之前版本的遗留字段,用于向后兼容;
    例如:无法保证中间服务器使用的HTTP协议版本,所以在采用Cache-Control:no-cache;时需要加上Pragma:no-cache;来进行兼容处理;
 
5、Trailer:用于实现说明在报文主体后记录了哪些首部字段,可应用于HTTP/1.1版本分块传输编码时;
 
6、Transfer-Encoding:规定了传输报文主体时采用的编码方式;HTTP/1.1的传输编码方式仅对分块传输编码有效;
 
7、Upgrade:用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议;
    Upgrade首部字段产生作用的Upgrade对象仅限于客户端和邻接服务器之间,so使用首部字段Upgrade时,还需要额外制定Connertion:Upgrade;
 
8、Via:追踪客户端与服务器直接的请求和响应报文的传输路径。报文经过代理或网关时,就会在Via中附加该服务器的信息,然后再进行转发;       经常会和TRACE方法一起使用;
 
9、Warning:告知用户一些与缓存相关的问题的警告;
    格式: Warning  [警告码]  [警告的主机:端口号]  ”[警告内容]“  ([日期时间])
    110
    111
    112
    113
    199
    214
    299
原文地址:https://www.cnblogs.com/milo-wjh/p/6752905.html