《图解HTTP》阅读总结(上)
系列文章目录
《图解HTTP》阅读总结(上)
文章目录
- 系列文章目录
- 前言
- 第 1 章 了解 Web 及网络基础
- 1. HTTP发展史
- 2. HTTP与TCP/IP协议的关系
- 3. HTTP对应TCP/IP协议各层的传输流程
- 4. URI 格式
- 第 2 章 简单的 HTTP 协议
- 1. 报文格式简述
- 2. HTTP 是不保存状态的协议
- 3. HTTP/1.0 和 HTTP/1.1 支持的方法
- 4. 持久连接
- 5. 使用 Cookie 的状态管理
- 第 3 章 HTTP 报文内的 HTTP 信息
- 1. 请求报文及响应报文的结构
- 2. 编码提升传输速率
- 3. 内容协商返回最合适的内容
- 第 4 章 返回结果的 HTTP 状态码
- 1. 状态码的类别
- 2. 2XX 成功
- 3. 3XX 重定向
- 4. 4XX 客户端错误
- 5. 5XX 服务器错误
- 总结
前言
如同译者所说,讲HTTP协议的书籍确实很少:
在我的印象中,讲解网络协议的书仅有两本。一本是《HTTP 权威指南》,但其厚度令人望而生畏;另一本是《TCP/IP 详解,卷 1》,内容艰涩难懂,学习难度较大。
确实如此,《HTTP 权威指南》我也看过一小部分,真是从入门到放弃,不是书写的不好,真的很棒,也很细致。但对于我来说太枯燥了。
这本《图解HTTP》,本书图文并茂,大量图片穿插文中,生动形象地向读者介绍每一个应用案例,减少了读者阅读时的枯燥感。哈哈,很适合我,我的文章也非常喜欢用“图解XXX”的方式,但真心没有这本书用图用的这么彻底。
虽然是一本2014年的“老书”,但其实很多知识还是沿用至今的,HTTP版本为1.1,推荐阅读一下。
第 1 章 了解 Web 及网络基础
当你通过浏览器查看网页的时候实际发生了什么?通过一幅图、一个问题开篇。
1. HTTP发展史
1990年,HTTP/0.9
1996 年的 5 月,HTTP/1.0
1997 年 1 月,HTTP/1.1
本书在2014年出版,书中写到“新 一代 HTTP/2.0 正在制订中,但要达到较高的使用覆盖率,仍需假以时日。”
实际上2015年,HTTP/2 发布,但真如作者所说,2.0普及真是**“没那么快”**。
2. HTTP与TCP/IP协议的关系
TCP/IP 是互联网相关的各类协议族的总称, 包含了好多协议
可见,HTTP是TCP/IP协议中的一个
3. HTTP对应TCP/IP协议各层的传输流程
TCP/IP 协议族各层的作用如下:
应用层
应用层决定了向用户提供应用服务时通信的活动。 TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(File Transfer Protocol,文件传输协议)和 DNS(Domain Name System,域 名系统)服务就是其中两类。 HTTP 协议也处于该层。
传输层
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据 传输。 在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报 协议)。
网络层(又名网络互连层)
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数 据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计 算机,并把数据包传送给对方。 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所 起的作用就是在众多的选项内选择一条传输路线。
链路层(又名数据链路层,网络接口层)
用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱 动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等 物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在 链路层的作用范围之内。
4. URI 格式
第 2 章 简单的 HTTP 协议
1. 报文格式简述
一个图表示一个简单的HTTP请求:
实际上,一个请求报文的组成如下:
2. HTTP 是不保存状态的协议
HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议自 身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个 级别,协议对于发送过的请求或响应都不做持久化处理。
3. HTTP/1.0 和 HTTP/1.1 支持的方法
4. 持久连接
HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。每次的请求都会造成无谓的 TCP 连接建立和断 开,增加通信量的开销。
为解决上述 TCP 连接的问题,HTTP/1.1 和一部分的 HTTP/1.0 想出了 持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法。持久连接的特点是,只要任意一端 没有明确提出断开连接,则保持 TCP 连接状态。
持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从 前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术 出现后,不用等待响应亦可直接发送下一个请求。
5. 使用 Cookie 的状态管理
保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入 了 Cookie 技术。Cookie 技术通过在请求和响应报文中写入 Cookie 信 息来控制客户端的状态。 Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的 首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出 去。 服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一 个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前 的状态信息。
第 3 章 HTTP 报文内的 HTTP 信息
1. 请求报文及响应报文的结构
2. 编码提升传输速率
**压缩数据方式:**HTTP 在传输数据时可以按照数据原貌直接传输,但也可以在传输过 程中通过编码提升传输速率。通过在传输时编码,能有效地处理大量 的访问请求。但是,编码的操作需要计算机来完成,因此会消耗更多 的 CPU 等资源。
常用的内容编码有以下几种。
gzip(GNU zip)
compress(UNIX 系统的标准压缩)
deflate(zlib)
identity(不进行编码)
**分割发送方式:**在 HTTP 通信过程中,请求的编码实体资源尚未全部传输完成之前, 浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割成 多块,能够让浏览器逐步显示页面。
HTTP/1.1 中存在一种称为传输编码(Transfer Coding)的机制,它可 以在通信时按某种编码方式传输,但只定义作用于分块传输编码中。
3. 内容协商返回最合适的内容
内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然 后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字 符集、编码方式等作为判断的基准。
包含在请求报文中的某些首部字段(如下)就是判断的基准。这些首 部字段的详细说明请参考下一章。
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Content-Language
内容协商技术有以下 3 种类型。
服务器驱动协商(Server-driven Negotiation)
由服务器端进行内容协商。以请求的首部字段为参考,在服务器端自动处理。但对用户来说,以浏览器发送的信息作为判定的依据,并不 一定能筛选出最优内容。
客户端驱动协商(Agent-driven Negotiation)
由客户端进行内容协商的方式。用户从浏览器显示的可选项列表中手 动选择。还可以利用 JavaScript 脚本在 Web 页面上自动进行上述选 择。比如按 OS 的类型或浏览器类型,自行切换成 PC 版页面或手机 版页面。
透明协商(Transparent Negotiation)
是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进 行内容协商的一种方法。
第 4 章 返回结果的 HTTP 状态码
HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端 的处理是否正常、通知出现的错误等工作。
状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结 果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出 现了错误。
1. 状态码的类别
2. 2XX 成功
- 200 OK 表示从 客户端发来的请求在服务器端被正常处理了。
- 204 No Content 该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中 不含实体的主体部分。
- 206 Partial Content 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。
3. 3XX 重定向
- 301 Moved Permanently 永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后 应使用资源现在所指的 URI。
- 302 Found 临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望 用户(本次)能使用新的 URI 访问。
- 303 See Other 该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。
- 304 Not Modified 该状态码表示客户端发送附带条件的请求 2 时,服务器端允许请求访 问资源,但未满足条件的情况。
- 307 Temporary Redirect 临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标准 64 禁止 POST 变换成 GET,但实际使用时大家并不遵守。 307 会遵照浏览器标准,不会从 POST 变成 GET。
4. 4XX 客户端错误
400 Bad Request 该状态码表示请求报文中存在语法错误。
401 Unauthorized 该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息。
403 Forbidden 该状态码表明对请求资源的访问被服务器拒绝了。
404 Not Found 该状态码表明服务器上无法找到请求的资源。
5. 5XX 服务器错误
- 500 Internal Server Error 该状态码表明服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障。
- 503 Service Unavailable 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法 处理请求。
总结
通过阅读前四章,将以前关于HTTP的散碎知识串起来了,虽然大部分知识之前都知道,但感觉通过系统学习一下,了解的更清晰了,知识需要形成体系。下一篇争取下周发出。
《图解HTTP》阅读总结(上)相关推荐
- 从电脑传PDF到IPad的阅读器上
[前言](讲的是IPad,IPhone也同理) 今天我遇到了这样的一个问题: 可以由于网络问题,导致了用Wifi传PDF一直打不开,所以就自己查了下. 在看到很多信息之后,加上写自己的东西,想做个总结 ...
- 你运营的公众号文章阅读量上不来,怎么回事?
很多操作公众号的小伙伴都在烦恼就是阅读量上不来,看那些大号一发文章动不动就是10万+,而自己文章阅读量却少的可怜,特别是那些坚持原创的小伙伴,较劲脑汁写了小半天的原创文章阅读量才是两位数,能不伤心吗? ...
- 护眼色RGB的数值及在福昕阅读器上的设置方法
护眼色RGB的数值及在福昕阅读器上的设置方法 护眼RGB的数值及效果 福昕PDF阅读器上的设置方法 福昕阅读器(橙色图标版) 福昕高级PDF编辑器(紫色图标版) 查看某种颜色RGB的方法 护眼RGB的 ...
- [从头读历史] 第250节 图解易经(上)
剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入元婴期的修炼后,日夜苦修,神通日进. 这日,忽然想起自己虽然神通大涨,却在人文涵养上始终无有寸进,不觉挂怀. 在和[工程师阿伟]商议后,决定先理清文 ...
- 《单核工作法图解》阅读摘要
文章目录 0. 什么是单核工作法? 0.1 五项基本概念 0.2 单核和全景的节奏 0.3 单核工作法的五大原理 原理一:已经开始的任务会占据我们的思维,直到它被完成或被抛弃 原理二:多任务切换导致低 ...
- 算法图解 读书笔记(上)
最近看了一本算法入门书--算法图解. 封面的插画很好玩儿.最吸引我的还是封面里的一句话:向小说一样有趣的算法入门书. 上个封面,大家感受一下: 一.算法简介 1.1 二分查找 一个有序数组中找一个数的 ...
- 如何轻松阅读 GitHub 上的项目源码?
作者 | 牛岱 zhihu.com/question/27821340/answer/808399749 我试过 Octotree,但它只是支持在浏览器左侧生成文件树,我也试过 GitHub Link ...
- 图解ecshop之批量上传与批量处理
1.登陆后台 2.下载csv文件,填写相关内容 注意:将填写的商品图片和商品缩略图上传到相应目录,例如:[根目录]/images/201202/: 请首先上传商品图片和商品缩略图再上传csv文件,否则 ...
- 图解如何在DC上添加自定义属性类
刚才在群里,看到大家问了个AD 自定义属性的问题,现在我来给大家解答下,大家可能都遇到过这样的场景: 1. 在工作上,需要在人员上增加一些属性,比如:性别.是否婚配.年龄.性取向-.(请忽视) 2. ...
- 图解比较李航书上的viterbi算法和dijistra算法
李航P184中有句话非常奇怪,是这样的: "根据动态规划原理,最优路径具有这样的特性:如果最优路径在时刻t通过节点it∗i_t^*it∗,那么这一路径从节点it∗i_t^*it∗到终点i ...
最新文章
- 开发微信小程序,100 万开发者都离不开它
- 还在为论文发愁?ACL组委会手把手教你论文投稿小技巧 | ACL 2017
- MPMoviePlayerController属性方法简介
- gdc服务器故障输入信号超出范围,H1Z1信号输入超出范围 | 手游网游页游攻略大全...
- java读取request中的xml
- [17] 楼梯(Stairs)图形的生成算法
- Nutch数据集的目录具体内容
- Triplet Loss
- 行业软件之PTV微观软件VISSIM4.3 5.0 5.1 5.2 5.3 5.4下载和相关资料
- c-lodop打印网页内容
- 数仓工具—Hive的数据组织管理方式(4)
- HadoopYarn设置Fair Scheduler公平调度器
- python获取上周周一日期_python python日期算法 本周,上周,本月,上月,本季,上季,今年, 去年...
- 免费ftp上传工具,三款免费的ftp上传工具
- 0 -1 分布(两点分布)
- 无法识别服务器硬件信息,请教:无法获取服务器硬件信息
- WPF开发(1)——建立WPF工程
- NAS不够快?那就上SSD享受如火箭般的体验吧!
- 上证指数30年k线图_仔细分析了过去30年的季线图后,我们发现了个秘密……
- 什么是 10x 程序员?
热门文章
- MES管理系统中,生产调度业务流程是怎么样的
- 捕食搜索matlab代码,第8章——捕食搜索算法分析.ppt
- linux修改X2APIC参数,Linux 開機參數 intremap=no_x2apic_optout
- c++ opengl 三维图形中显示文字_为什么使用GPU渲染图形图像,而不使用CPU呢?
- 微信升级后不再使用x5内核,debugx5.qq.com打不开,如何开启微信调试?
- 【从零开始】阿里云服务器配置web开发环境及部署本地web项目
- android------之高德地图实现定位和3D地图显示
- pytorch迁移学习载入部分权重
- 未来可能的安全焦点:GIS地理信息系统安全问题分析
- 酒店预订分销系统和分销商