阅读时间: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. win cmd 设置代理

    windows: HTTP(S)代理服务器:127.0.0.1:5783 SOCKS代理服务器:127.0.0.1:5789 set 2 set http_proxy=socks5://127.0.0 ...

  2. Typescript 介绍和安装编译

    一. Typescript 介绍 1. TypeScript 是由微软开发的一款开源的编程语言. 2. TypeScript 是 Javascript 的超级,遵循最新的 ES6.Es5 规范.Typ ...

  3. RabbitMQ 入门教程(PHP版) 第五部分:通过主题进行消息分发(Topics)

    对于 Message 的 routing_key 字符串格式是有限制的:以点号"."分割的字符表,如php.laravel,并且长度不能超过 255 个字节. 对于 routing ...

  4. PAT 甲级 1144 The Missing Number (20 分)(简单,最后一个测试点没过由于开的数组没必要大于N)

    1144 The Missing Number (20 分)   Given N integers, you are supposed to find the smallest positive in ...

  5. LeetCode_219. Contains Duplicate II

    219. Contains Duplicate II Easy Given an array of integers and an integer k, find out whether there ...

  6. docker外部执行容器内部命令

    docker exec jenkins 'cat /var/jenkins_home/secrets/initialAdminPassword'

  7. MySQL语句增加字段,修改字段名,修改类型,修改默认值

    原文地址:https://blog.csdn.net/kimgoo/article/details/54630257 增加字段:alter table 表名 ADD 字段 类型 约束 [默认值 注释] ...

  8. Word中如何加载EndNote

    在百度中搜索了很多解决方案,都不尽相同忙了一上午也没解决,然后搁浅,吃过午饭回来在安装目录下找到如下exe文件三四步点击搞定 所以,有时候问题出现了长时间没解决,可以换下环境出去溜达一圈说不定就茅塞顿 ...

  9. docker pull 提示错误的username or password

    安装完docker后,使用cli docker pull images 时,提示用户名密码错误 解决方法 使用docker ID 不要使用 Email 登陆. https://github.com/d ...

  10. 打印格式化printf

    #define _DEBUG_ #ifdef _DEBUG_#define  printm(fmt, ...) do { printf("%s line %d, "fmt, __f ...