阅读时间:2019.10.30-2019.11.6

阅读心得

从知乎上看到有人推荐这本书,本身对计算机网络方面学习的比较少,于是就买来这本书开始看。这本书总体看下来比较轻松,因为书中的插画非常卡通,而且因为整本书都是在围绕HTTP进行讲解,所以内容上不会设计太多其他深奥的知识。读完之后,我对HTTP有了一个基本的认识,从以前只知道它是一个协议,到现在能够搞清楚这个协议内部的结构、返回的状态码等等,这都得益于这本小巧但又细致的书。也希望感兴趣的伙伴可以去读一读这本书呀!

阅读总结

【这本书一共有十一章,每一章都根据侧重点的不同展开介绍。在这里我将本书的章节框架展开,并根据自己读完的理解给每个部分做个小结,也方便自己日后复习。】

第一章:了解Web即网络基础

  • 1.1 使用HTTP协议访问Web(什么是HTTP?什么是客户端、服务器端?)
  • 1.2 HTTP的诞生(诞生原因:知识共享;WWW(即Web)构建技术:HTML、HTTP、URL)
  • 1.3 网络基础TCP/IP

(HTTP是TCP/IP内部的一个子集;TCP/IP的传输流?发送端从应用层往下走,每通过一层增加首部,接收端从链路层往上走,每通过一层删除首部)

TCP/IP分层如下表所示:

应用层 各类应用服务,比如FTP(文件传输协议)、DNS(域名系统)
传输层 将计算机之间的数据进行分割、传输;TCP(传输控制协议)、UDP(用户数据报协议)
网络层 处理在网络上流动的数据包,在众多的选项内选择一条传输路线;数据包是网络传输的最小数据单位
链路层 处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动、NIC(网络适配器,即网卡)、光纤等物理可见部分
  • 1.4 与HTTP关系密切的协议:IP\TCP和DNS

(IP网际协议:网络层;IP地址可变换,MAC地址基本不会变;ARP协议:根据IP地址反查MAC地址;IP间的通信依赖MAC地址来搜索下一个中转目标)

(TCP协议:传输层;字节流服务:大数据分割成报文段单位的数据包;三次握手:SYN标志、SYN/ACK标志、ACK标志)

(DNS服务:应用层(HTTP协议也在应用层);域名与IP地址之间(双向查找)的解析服务)

  • 1.5 负责域名解析的DNS服务(见上1.4)
  • 1.6 各种协议与HTTP协议的关系

(客户端输入网址,DNS解析对应的IP地址,HTTP生成请求报文,TCP分割成报文段,IP边中转边发送,TCP接收报文段并重组,HTTP处理请求内容)

  • 1.7 URI和URL

(URI:统一资源标识符,URL:统一资源定位符,URL是URI的子集)

绝对URI的格式:

http:// user:pass@ www.example.jp: 80 /dir/index.htm? uid=1# ch1
协议方案名 登录信息(认证) 服务器地址 服务器端口号 带层次的文件路径 查询字符串 片段标识符

第二章:简单的HTTP协议

  • 2.1 HTTP协议用于客户端和服务器端之间的通信(客户端?服务器端?)
  • 2.2 通过请求和响应的交换达成通信(请求报文和响应报文的组成?)
  • 2.3 HTTP是不保存状态的协议(发送过的请求和响应都不保存状态--引进了Cookie技术来保持状态)
  • 2.4 请求URI定位资源(如果对服务器本身发起请求,可用一个*来代替请求URI)
  • 2.5 告知服务器意图的HTTP方法
GET 获取资源
POST 传输实体主体
PUT 传输文件
HEAD 获得报文首部
DELETE 删除文件
OPTIONS 询问支持的方法
TRACE 追踪路径
CONNECT 要求用隧道协议连接代理
  • 2.6 使用方法下达命令(见上2.5)
  • 2.7 持久连接节省通信量(持久连接:任意一端没有明确提出断开连接,则保持TCP连接状态;管线化:不用等待响应亦可直接发送下一个请求)
  • 2.8 使用Cookie的状态管理(请求报文(没有Cookie信息的状态)--响应报文(服务器端生成Cookie信息)--请求报文(自动发送保存着的Cookie信息))

第三章:HTTP报文内的HTTP信息

  • 3.1 HTTP报文(报文首部+空行+报文主体)
  • 3.2 请求报文及响应报文的结构

( 请求报文的结构:请求行+请求首部字段+通用首部字段+实体首部字段+其他;响应报文的结构:请求行+请求首部字段+通用首部字段+实体首部字段+其他)

请求行 方法、请求URI、HTTP版本
状态行 状态码、原因状语、HTTP版本
首部字段 请求首部、响应首部、通用首部、实体首部
其他 HTTP的RFC里未定义的首部(Cookie等)
  • 3.3 编码提升传输速率

(什么是报文?HTTP通信的基本单位,由8位组字节流组成;什么是实体?请求或响应的有效载荷数据;压缩传输的内容编码;分割发送的分块传输编码)

  • 3.4 发送多种数据的多部分对象集合(多部分对象集合(Multipart))
  • 3.5 获取部分内容的范围请求(首部字段Range指定资源的byte范围)
  • 3.6 内容协商返回最合适的内容(服务器驱动协商,客户端驱动协商,透明协商)

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

  • 4.1 状态码告知从服务器端返回的请求结果
  类别 原因状语
1XX Informational(信息性状态码) 接受的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器端错误状态码) 服务器处理请求错误
  • 4.2 2XX成功(200 OK--请求成功;204 No Content--没有资源可返回;206 Partial Content--范围请求)
  • 4.3 3XX重定向

(301 Moverd Permanently--永久性重定向;302 Found--临时性重定向;303 See Other--使用GET方法获取资源的另一个URI;

304 Not modified--资源已找到,但未符合条件请求;307 Temporary Redirect--临时重定向,与302类似)

  • 4.4 4XX客户端错误

(400 Bad Request--请求报文语法错误;401 Unauthorized--请求需要认证;403 Forbidden--未获得访问授权;404 Not Found--服务器上没有请求的资源)

  • 4.5 5XX服务器错误

(500 Internal Server Error--服务器端在执行请求时发生了错误;503 Service Unavailable--服务器处于超负载或者正在停机维护)

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

  • 5.1 用单台虚拟主机实现多个域名(相同的IP地址下,虚拟主机可以寄存多个不同主机名和域名的Web网站)
  • 5.2 通信数据转发程序:代理、网关、隧道

(代理:客户端和服务器端的中间人,接收请求和响应;源服务器?每次经过代理追加写入Via首部信息;缓存代理、透明代理)

(网关:对请求进行处理;通过加密提高通信的安全性)

(隧道:在相隔甚远的客户端和服务器两者之间进行中转,保持双方通信连接;通信双方断开连接时隧道结束)

  • 5.3 保存资源的缓存

(缓存:代理服务器或者客户端本地磁盘内保存的资源副本)

第六章:HTTP首部

  • 6.1 HTTP报文首部
  • 6.2 HTTP首部字段
  • 6.3 HTTP/1.1通用首部字段
首部字段名 说明
Cache-Control 控制缓存的行为
Connection 连接管理
Date 创建报文的日期时间
Pragma 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
Upgrade 升级为其他协议
Via 代理服务器的相关信息
Warning 错误通知
  • 6.4 请求首部字段
首部字段名 说明
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码
Accept-Language 优先的语言
Authorization Web认证信息
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
Host 请求资源所在服务器
If-Match 比较实体标记(ETag)
If-Modified-Since 比较资源的更新时间
If-None-Match 与If-Match相反
If-Range 资源未更新时发送实体Byte的范围请求
If-Unmodified-Since 与If-Modified-Since相反
Max-Forwards 最大传输逐跳数
Proxy-Authorization 代理服务器要求客户端的认证信息
Range 实体的字节范围请求
Referer 对请求中URI的原始获取方
TE 传输编码的优先级
User-Agent HTTP客户端程序的信息
  • 6.5 响应首部字段
首部字段名 说明
Accept-Range 是否接收字节范围请求
Age 推算资源创建经过时间
ETage 资源的匹配信息
Location 令客户端重定向至指定URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
Server HTTP服务器的安装信息
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息
  • 6.6 实体首部字段
首部字段名 说明
Allow 资源可支持的HTTP格式
Content-Encoding 实体主体适用的编码方式
Content-Language 实体主体的自然语言
Content-Length 实体主体的大小(单位:字节)
Content-Location 替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体主体过期的日期和时间
Last-Modified 资源的最后修改日期时间
  • 6.7 为Cookie服务的首部字段
首部字段名 说明 首部类型
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接收到的Cookie信息 请求首部字段
  • 6.8 其他首部字段(不再列举)

第七章:确保Web安全的HTTPS

  • 7.1 HTTP的缺点

(a.通信使用明文(不加密),内容可能会被窃听

b.不验证通信方的身份,有可能遭遇伪装

c.无法证明报文的完整性,有肯能已经被纂改)

  • 7.2 HTTP+加密+认证+完整性保护=HTTPS

(HTTP通信接口部分用SSL和TLS协议代替即为HTTPS;公开密钥加密技术)

第八章:确认访问用户身份的认证

  • 8.1 何为认证(判断访问服务器的对方)
  • 8.2 BASIC认证(基本认证;用户id+密码+Base64编码处理)
  • 8.3 DIGEST认证(摘要认证;响应摘要+质询码产生的计算结果)
  • 8.4 SSL客户端认证(客户端证书+密码)
  • 8.5 FormBase认证( 基于表单认证;按登录信息的验证结果认证)

第九章:基于HTTP的功能追加协议

  • 9.1 基于HTTP的协议
  • 9.2 消除HTTP瓶颈的SPDY

(HTTP瓶颈:一条连接上只能发送一个请求;请求只能从客户端开始;请求/响应首部未经压缩就发送;发送冗长的首部;可任意选择数据压缩格式)

(Ajax:只更新局部界面;Comet:服务器端有更新时载返回响应;SPDY:TCP/IP的应用层和传输层之间通过新加会话层的形式运作,通信中使用SSL)

  • 9.3 使用浏览器进行全双工通信的WebSocket(推送功能、减少通信量、握手/请求、握手/响应)
  • 9.4 期盼已久的HTTP/2.0(SPDY、HTTP Speed + Mobility、 Network-Friendly HTTP Upgrade)
  • 9.5 Web服务器管理文件的WebDav (可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统)

第十章:构建Web内容的技术

  • 10.1 HTML(超文本标记语言、层叠样式表CSS)
  • 10.2 动态HTML(调用客户端脚本语言JavaScript实现对HTML的Web页面的动态改造;DOM(文档对象模型)可指定预发生动态变化的HTML元素)
  • 10.3 Web应用(通过Web功能提供的应用程序;CGI;Servlet:能在服务器上创建动态内容的程序,是Java语言实现的一个接口,属于Java EE的一部分)
  • 10.4 数据发布的格式及语言(XML、RSS、JSON)

第十一章:Web的攻击技术

  • 11.1 针对Web的攻击技术(主动攻击:直接访问Web应用,将攻击代码传入;被动攻击:例用全套策略执行攻击)
  • 11.2 因输出值转义不完全引发的安全漏洞(跨站脚本攻击(XSS)、窃取用户Cookie、SQL注入攻击、OS命令注入攻击、HTTP首部注入攻击、邮件首部注入攻击)
  • 11.3 因设置或设计上的缺陷引发的安全漏洞(强制浏览、不正确的错误消息处理、开放重定向)
  • 11.4 因会话管理疏忽引发的安全漏洞(会话劫持、会话固定攻击、跨站点请求伪造)
  • 11.5 其他安全漏洞(密码破解、点击劫持、DOS攻击(服务停止攻击/拒绝服务攻击))

《图解HTTP》读后总结的更多相关文章

  1. 我的第一本docker书-阅读笔记

    花了三四天看完了我的第一本docker书,话说书写的还是挺简单易懂的.与传统的VM,VirtualBox,或者与那种内核虚拟的xen,kvm相比,docker作为一种容器的虚拟方式,以启动进程的方式来 ...

  2. 《第一本docker书》—— 读后总结

    关于docker 这本书其实并没有读完,只不过最近工作比较繁忙,也无心再看这些用不到的书.以后要是工作需要,再仔细学习吧. 这次的阅读算是达到目的了,对docker有了一定的了解.它的作用.意义以及大 ...

  3. 第一本Docker书读书笔记

    日常使用命令 1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: ...

  4. 《第一本Docker书》

    Docker简介 Docker依赖写时复制(copy-on-write),使修改应用程序非常迅速. Docker推荐单个容器只运行一个应用或进程,鼓励面向服务的架构和微服务架构. Docker的核心组 ...

  5. 第一本docker书 学习笔记(二)

    #安装docker的先决条件 运行64位CPU构架的计算机(docker目前不支持32位的cpu) 运行LUFSinux3.8或者更高版本内核 内核必须支持一种合适的存储驱动,例如: device M ...

  6. 《第一本Docker书》学习笔记——第3章 Docker入门

    3.1 确保Docker已经就绪 查看docker是否正常工作: sudo docker info 3.2 运行我们的第一个容器 现在,让我们尝试启动第一个Docker容器.我们可以使用docker ...

  7. 《第一本docker书》- 第一章笔记

    环境: Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-30-generic i686) 第一章: 1 Docker客户端和服务器 2 Docker镜像 添加一个文件,执行一 ...

  8. 《第一本docker书》第4章 使用docker镜像和仓库 读书笔记

    docker最底端是一个引导文件系统,即bootfs. 第二层是root文件系统rootfs,位于引导文件系统之上. 在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并 ...

  9. 第一本docker书,,持续更新中

    1.查看应用是否在docker中部署成功 需要确认curl已安装 whereis curl sudo apt-get -y install curl curl localhost:8081   如果成 ...

  10. 第一本docker书 学习笔记(一)

    Docker的核心组件: Docker客户端和服务端 Docker镜像 Registry Docker容器 # Docker客户端和服务端 docker 是一个 C/S架构程序.客户端只需要向dock ...

随机推荐

  1. c代码审查软件

    1. Coccinelle http://coccinelle.lip6.fr/

  2. flex简单参考实例

    <!DOCTYPE html> <html> <head> <title></title> <style type="tex ...

  3. openresty开发系列26--openresty中使用redis模块

    openresty开发系列26--openresty中使用redis模块 在一些高并发的场景中,我们常常会用到缓存技术,现在我们常用的分布式缓存redis是最知名的, 操作redis,我们需要引入re ...

  4. java8 数据集过滤removeIf和filter

    对象如下,需求:只要30岁以下的人 //求职者的实体类 public class Person { private String name;//姓名 private Integer age;//年龄 ...

  5. Sword cjson库函数使用

    /* cjson库的使用 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #includ ...

  6. 004-guava 集合-新增集合类型-MultiSet, MultiMap, BiMap , Table, ClassToInstanceMap, RangeSe, RangeMap等

    一.概述 Guava引入了很多JDK没有的.但明显有用的新集合类型.这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念.作为一般规则,Guava集合非常精准地遵循了JDK接口契 ...

  7. ES6深入浅出-9 Promise-3.Promise的细节

    await 拿到用户信息,函数前面加await await等待Promise成功或者失败. 如果Promise里面失败了 什么也拿不到.报了一个错误,叫做不认识. 如果想拿到正常错误,就绪try一下 ...

  8. [译]在Pandas的Dataframe中删除行、列

    导入模块 import pandas as pd 创建dataframe data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 'yea ...

  9. PAT 甲级 1073 Scientific Notation (20 分) (根据科学计数法写出数)

    1073 Scientific Notation (20 分)   Scientific notation is the way that scientists easily handle very ...

  10. 【物联网】arduino wifi

    https://www.arduino.cn/forum.php?mod=viewthread&tid=49561 http://dy.163.com/v2/article/detail/DC ...