以前对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

图解http读书笔记的更多相关文章

  1. C#图解教程读书笔记(第1章 C#和.net框架)

    C#中的主要需要记住的基础概念 CLR公共语言运行库 CIL中间语言,所有的代码都会编译成中间语言. CLI公共语言基础结构 C#的优点 C#有自动垃圾回收机制

  2. C#图解教程读书笔记(第15章 委托)

    委托是C#的一个很重要的知识点. 1.什么是委托 委托在我认为,就是一系列格式相同的方法列表,可能就是定义的名称不一致,参数.返回值等都是一样的. 2.如何声明委托 delegate void MyF ...

  3. 图解HTTP读书笔记--精简版

    这本书重点讲了两点,分别是 HTTP的报文格式 HTTPS比HTTP优秀在哪里 接下来分部分讨论一下: 1. HTTP的报文格式 请求报文格式: 请求行     指明请求方法 请求路径 和协议   如 ...

  4. 《TCP/IP图解》读书笔记

    看这本书的目的: 了解计算机之间是怎么通信的 熟悉TCP/IP协议 后面就这两个目的进行展开,要达到这两个目的,读这本书,学到了哪些知识. 一.计算机之间是怎么通信的 先来了解下面几个概念,中继器,二 ...

  5. C#图解教程读书笔记(第9章 语句)

    文件头的Using是Using指令,不是using语句 using (TextWriter tw = File.CreateText("xixi.txt")) { tw.Write ...

  6. C#图解教程读书笔记(第8章 表达式和运算符)

    表达式 字面量 整数字面量 字符字面量 字符串字面量 求值顺序 优先级 结合性 与C和C++不同,在C#中的数字不具有布尔意义. 各种运算符的作用(过) 用户定义类型转换 class XiXiInt ...

  7. C#图解教程读书笔记(第7章 类和继承)

    1.所有的类都继承自object 2.如何隐藏基类的成员 要隐藏一个继承的数据成员,需要声明一个新的相同类型的成员,并使用相同的名称. 通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或掩盖继承 ...

  8. C#图解教程读书笔记(第6章 类进阶)

    类成员声明语句由下列部分组成:核心声明.一组可选的修饰符和一组可选的特性(attribute). [特性] [修饰符] 核心声明 修饰符: 如果有修饰符,必须放在核心声明之前. 如果有多个修饰符,要有 ...

  9. C#图解教程读书笔记(第5章 方法)

    类型推断和var关键字 从C#3.0开始,可以在变量声明的开始部分的的位置使用新的关键字var. Var关键字并不是某种特别类型的符号.它只是句法上的速记,表示任何可以从初始化的右边推断出的类型. V ...

随机推荐

  1. nginx重要配置项简要说明

    1.重要配置项 以下是一个完整的nginx配置信息. #================================以下是全局配置项 #指定运行nginx的用户和用户组,默认情况下该选项关闭(关闭 ...

  2. 【数据结构】bzoj1455罗马游戏

    Description 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团.最近举行了一次平面几何测试,每个人都得到了一个分数. 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻 ...

  3. c语言几个字符串处理函数的简单实现

    直接贴代码: char* strcpy(char *a,char*b){//把字符串b全部拷贝到a中 assert(a != nullptr&&b != nullptr); char ...

  4. 【BZOJ2648】SJY摆棋子 [KD-tree]

    SJY摆棋子 Time Limit: 20 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 这天,SJY显得无聊.在家自己 ...

  5. bzoj 2435 BFS

    我们可以先将无根树变成有根树,随便选一个点当根就行了,我们选1,bfs求出来每个点 的size值,代表以它为根节点的子树中有多少个节点,(dfs可能会爆栈),然后再对于每一条 边算就好了 我tle了, ...

  6. Educational Codeforces Round 41 A B C D E

    A. Tetris 题意 俄罗斯方块,问能得多少分. 思路 即求最小值 Code #include <bits/stdc++.h> #define F(i, a, b) for (int ...

  7. camera摄像原理之四:曝光和GAMMA【转】

    转自:http://blog.csdn.net/ghostyu/article/details/7912880 从最明亮到最黑暗,假设人眼能够看到一定的范围,那么胶片(或CCD 等电子感光器件)所能表 ...

  8. 2.如何使用python连接hdfs

    总所周知,python是一门很强大的语言,主要在于它有着丰富的第三方模块,当然连接hdfs的模块也不例外. 在python中有一个模块也叫hdfs,可以使用它连接hadoop的hdfs.直接pip i ...

  9. 【 sysbench 性能基准测试 】

    度娘解释:sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试. 目前支持的数据库支持:MySQL,pgsql,oracle 这3种数据库. 安装s ...

  10. JS:body元素对象的clientWidth、offsetWidth、scrollWidth、clientLeft、offsetLeft、scrollLeft

    document.body.clientWidth 获取body元素对象的内容可视区域的宽度,即clientWidth=width+padding,不包括滚动条. document.body.clie ...