以前对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. Spring MVC框架下 从后台读取数据库并显示在前台页面【笔记自用 不推荐作为参考】

    1.书写jsp页面  people.jsp 1.设计显示格式以及内容显示 2.设计显示内容的范围 2.书写entity实体类 PeopleFormMap.java 书写传入的参数主要包括 要引用的数据 ...

  2. shell之流程控制

    一.if语句.while.for循环各种小例题 1.用户验证 [root@bogon ~]# cat buer.sh #!/bin/bash #user='buer' #password='1234. ...

  3. RPC-Thrift(四)

    Client Thrift客户端有两种:同步客户端和异步客户端. 同步客户端 同步客户端比较简单,以RPC-Thrift(一)中的的例子为基础进行研究源码,先看一下类图. TServiceClient ...

  4. bzoj3382 [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3382 [题解] 套路题. 首先我们会发现曼哈顿距离不好处理,难道要写kdtree??? (k ...

  5. Selenium2+python自动化71-多个浏览器之间的切换【转载】

    前言 有时候一些业务的功能涉及到多个系统,需要在web系统1打开造一些数据,然后用到某些参数是动态生成的,需要调用web系统2里面的参数. 举个简单例子:在做某些业务的时候,需要手机短信验证码,我不可 ...

  6. C#关于log4net(Log For Net)

    1       介绍 log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具,详细信息参见Apache网站.它是针对Java的log4j(Log For Java ...

  7. Django中遇到的mysql问题

    最近在用Django写个网站,连接mysql的时候出现了几个问题,总结一下 写好setting.py和models.py后,syncdb都没什么问题,在测试后台发表文章的时候就出错了,本来是测试mar ...

  8. QT_QMAKE_EXECUTABLE reported QT_INSTALL_LIBS as /usr/lib/i386-linux-gnu but ...

    $sudo apt-get install libqt4-dev done!!!

  9. sqlmap的小试牛刀

    这次算是一次用sqlmap的例子,写的很水. 目的:通过工具扫描到了后台的数据库的地址(如下图),想通过sqlmap找到数据库的用户和密码进入到数据库(首先可以尝试一下root:root一般都是这个情 ...

  10. 链表学习二:链表反转与查找倒数第K个

    //单链表反转 ListNode* RevertList(ListNode* m_pHead){ ListNode* pCurrent = m_pHead; ListNode* pPrev=NULL; ...