以前对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. 【bzoj2219-数论之神】求解x^a==b(%n)-crt推论-原根-指标-BSGS

    http://www.lydsy.com/JudgeOnline/problem.php?id=2219 弄了一个晚上加一个午休再加下午一个钟..终于ac..TAT 数论渣渣求轻虐!! 题意:求解 x ...

  2. 【HDU5772】String Problem [网络流]

    String Problem Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Ou ...

  3. [bzoj4515][Sdoi2016]游戏-树链剖分+李超线段树

    Brief Description Alice 和 Bob 在玩一个游戏. 游戏在一棵有 n 个点的树上进行.最初,每个点上都只有一个数字,那个数字是 123456789123456789. 有时,A ...

  4. karma和jasmine的测试(包括angular测试)

    本篇博客主要就是针对现在日新月异的技术和快速开发,测试被很多人忽略,其实在开发中如何保证代码的质量以及逻辑的完整性,测试显得十分重要,本文就是负责karma+jasmine来测试. 1.搭建测试的环境 ...

  5. bzoj 1208 HNOI2004宠物收养所 平衡树

    裸平衡树,恢复手感用的 //By BLADEVIL var n :longint; i :longint; x, y :longint; t, tot :longint; key, s, left, ...

  6. (五)对linux内核中jiffies+Hz表示一秒钟的理解

    jiffies在内核中是一个全局变量,它用来统计系统启动以来系统中产生的总节拍数,这个变量定义在include/Linux/jiffies.h中,定义形式如下. unsigned long volat ...

  7. 5.flume实战(二)

    需求:监控一个文件实时采集新增的数据并输出到控制台 简单理解就是:监控一个文件,只要这个文件有新的内容追加,就将它输出到控制台. agent技术选型:exec source + memory chan ...

  8. [ Openstack ] Openstack-Mitaka 高可用之 Dashboard

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  9. [ python3 ] 基于zabbix 自动生成xlsx监控文档

    准备做一个每周自动的巡检报告,数据来源于zabbix,通过python读取zabbix数据库获取数据并制作成excel表格, 本来打算直接邮件发送到指定邮箱,但是都被SMTP过滤掉了,试过126和QQ ...

  10. fullpage.js jq全屏滚动插件

    fullPage.js和fullPage都能实现全屏滚动,二者区别是:fullPage.js需依赖于JQuery库,而fullPage不需要依赖任何一个js库,可以单独使用. (代码演示效果并且可以下 ...