图解HTTP,搞定HTTP就一步!!!

介绍

  • HTTP到底是什么呢?很多小伙伴只局限于 “超文本传输协议” 这几个字 以及 相关的一些用法,对其本质却不是很了解。近期我深入学习了 《图解HTTP》这本书,做出了一下总结。希望能够帮到对这方面知识有疑问的小伙伴
  • 本人菜鸟一枚,处于学习阶段,内容如有错误之处请评论区友好指出,勿喷!!!!!!!
  • HTTP 报文首部内容总结到了思维导图,请参考末尾附件图片!!!!!!

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

TCP/IP:

一、TCP/IP 协议族分为四层:应用层、传输层、网络层、数据链层

二、http 超文本传输协议是 TCP/IP 的一个 子集(处于应用层)

​ 1、应用层:应用层决定了向用户提供应用服务时通信的活动,http 协议也处于应用层(http)

​ 2、传输层:传输层为应用层,提供处理网络链接中的两台计算机器之间的数据传输(tcp)

​ 3、网络层:处理网络中流动的数据包,数据包是网络传输的最小数据单位(ip)

​ 4、数据链层:用于处理网络的硬件部分,包括操作系统、硬件的设备驱动,以及光纤等物理可见部分(以太网硬件部分)

三、几乎所有的网络的系统都会用到IP 协议;IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)

四、TCP 位于传输层,提供可靠的字节流服务,

​ 1、TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方

​ 2、TCP 协议采用三次握手策略,来保证通信的可靠性(客户端 --标有SYK的数据包–>服务器–标有SYK/ACK的数据包–>客户端–标有ACK的数据包–>服务端)

负责域名解析的 DNS 服务:

一、DNS 服务 是 和 HTTP 协议一样位于应用层的协议,用于解析 域名和 IP 地址

二、DNS 协议可以通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务

URI、URL

一、URI 统一资源表识符;URL:统一资源定位符,

二、URI 用字符串标识某一互联网资源,而 URL表示资源的地点(互联网上所处的位置),URL是 URI 的子集

三、URI解读:

​ Uniform: 规定统一的格式可方便处理多种不同类型的资源

​ Resource: 资源的定义是“可标识的任何东西”

​ ide ntifier: 表示可标识的对象。也称为标识符

四、URI 格式:

​ http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1

​ 1、http:// -----> 协议方案名

​ 2、user:pass -----> 登陆信息(认证)

​ 3、www.example.jp -----> 服务器地址

​ 4、:80 -----> 服务器端口号

​ 5、/dir/index.thm -----> 带层次的文件路径

​ 6、?uid=1 查询支付串 ----->(浏览器中的 参数)

​ 7、#ch1 -----> 片段标识符(浏览器中的伪类/哈希值)

第二章:简单的 HTTP 协议

HTTP 协议用于客户端和服务器端之间 的通信

​ 1、请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端

通过请求和响应的交换达成通信

​ 1、HTTP 中,请求从客户端发出,最后服务器端响应该请求并返回,服务器端在没有接收到请求之前不会发送响应。

​ 2、请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的 在这里插入图片描述

​ 3、响应报文由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主 体构成
在这里插入图片描述

http 是不保存状态的协议

​ 一、HTTP 协议自身不具备保存之前发送过的请求或响应的功能

​ 1、为实现保存状态功能,引入了 Cookie 技术,使用 Cookie + HTTP 协议,就可以实现状态管理

告知服务器意图的 HTTP 方法

​ 一、GET :获取资源

​ 1、GET 方法用来请求访问已被 URI 识别的资源

​ 二、POST:传输实体主体

​ 1、向服务器发送信息

​ 三、PUT:传输文件

​ 1、将文件传递给服务器

​ 2、该方法自身不带验证机制,任何人都可以上床文件,存在安全问题,因此一般的 Web 网站不使用该方法

​ 四、HEAD:获得报文首部

​ 1、HEAD 方法和 GET 方法一样,只是不返回豹纹的主体部分。用于确定 URI 的有效性和资源的根性日期时间等

​ 五、DELETE:删除文件

​ 1、DELETE 方法用来删除文件,与 PUT 方法相反,按请求的 URI 删除指定的资源

​ 六、OPTIONS:询问支持的方法

​ 1、OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法
在这里插入图片描述

​ 七、TRACE:追踪路径

​ 1、TRACE 方法是让 Web 服务器端将之前的请求通信环响应给客户端的方法

​ 八、CONNECT:要求用隧道协议连接代理

​ 1、CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协 议进行 TCP 通信

使用 Cookie 管理状态

​ 一、Cookie 技术通过在请求和响应报文中写入 Cookie 信 息来控制客户端的状态

​ 二、Cookie 会根据从服务器端发送的响应报文内的 Set-Cookie 的 首部字段信息,通知客户端保存 Cookie

​ 三、客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发给服务器(如下)
在这里插入图片描述

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

http 报文

​ 一、用于 HTTP 协议交互的信息被称为 HTTP 报文

​ 二、请求端(客户端)的 HTTP 报文叫做请求报文

​ 三、响应端(服务器端)的叫做响应报文

​ 四、HTTP 报文本身是由多行(用 CR+LF 作换行符)数据构成的字符串文 本

​ 五、HTTP 报文大致可分为报文首部和报文主体两块。两者由最初出现的 空行(CR+LF)来划分。通常,并不一定要有报文主体

​ 六、请求报文和响应报文的首部内容由:请求行、状态行、首部字段 组成:

​ 请求行:包含用于请求的方法,请求 URI 和 HTTP 版本

​ 状态行:包含表明响应结果的状态码,原因短语和 HTTP 版本。

​ 首部字段:包含表示请求和响应的各种条件和属性的各类首部。

​ 七、首部分为:通用首部、请求首部、响应首部和实体首 部,可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)

编码提升传输速率

​ 一、可以在传输过 程中通过编码提升传输速率,编码的操作需要计算机来完成,因此会消耗更多 的 CPU 等资源

​ 二、报文主体和实体主体的差异

​ 报文:是 HTTP 通信中的基本单位,由 8 位组字节流组成,通过 HTTP 通信传输

​ 实体:作为请求或响应的有效载荷数据被传输,其内容由实 体首部和实体主体组成。

​ 三、HTTP 报文的主体用于传输请求或响应 实体主体。

​ 四、报文主体等于实体主体。只有当传输中进行编码操作时,实体 主体的内容发生变化,才导致它和报文主体产生差异

​ 五、内容编码指明实体内容上的编码格式,并保持实体信息原样压缩;由客户端接收并负责解码。

​ 六、常用的内容编码格式:gzip(GNU zip)、compress(UNIX 系统的标准压缩)、deflate(zlib)、identity(不进行编码)

​ 七、在传输大容量数据时,通过把数据分割成 多块,能够让浏览器逐步显示页面,每一块都会用十六 进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标 记

发送多种数据的多部分对象集合

​ 一、多部分对象集合包含的对象如下

​ multipart/form-data:在 Web 表单文件上传时使用

​ multipart/byteranges: 状态码 206 响应报文包含了多个范 围的内容时使用

​ 二、在 HTTP 报文中使用多部分对象集合时,需要在首部字段里加上 Content-type

获取部分内容的范围请求

​ 一、防止网络中断后下载中途中止,恢复网络后从头开始下载的问题,要实现该功能需要指定下载的实体范围,像这样的指定范围发送的请 求叫做范围请求

​ 二、执行范围请求时,会用到首部字段 Range 来指定资源的 byte 范围

​ 获取5001-10000字节:Range: bytes=5001-10000

​ 从 5001 字节之后全部的:Range: bytes=5001-

​ 从一开始到 3000 字节和 5000~7000 字节的多重范围:Range: bytes=-3000, 5000-7000

​ 三、范围请求响应会返回状态码为 206,如果无法响应,则返回状态码 200 和完整的实体内容

​ 四、响应会在首部字段 Content Type 标明 multipart/byteranges 后返回响应报文

内容协商返回最合适的内容

​ 一、内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然 后提供给客户端最为适合的资源

​ 二、内容协商会以响应资源的语言、字 符集、编码方式等作为判断的基准

​ 三、判断基准字符串:Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language

​ 四、内容协商协议有三种:

​ 服务器驱动协商(Server-driven Negotiation):由服务器端进行内容协商。以请求的首部字段为参考,在服务器端自 动处理

​ 客户端驱动协商(Agent-driven Negotiation):由客户端进行内容协商的方式。用户从浏览器显示的可选项列表中手 动选择、还可以利用 JavaScript 脚本在 Web 页面上自动进行上述选 择

​ 透明协商(Transparent Negotiation):是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进 行内容协商的一种方法

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

状态码告知从服务器端返回的请求结果

​ 一、状态码类别:
在这里插入图片描述

2XX 成功

​ 一、200 OK: 表示从客户端发来的请求在服务器端被正常处理了

​ 二、204 No Conten:服务器接收的请求已成功处理,但在返回的响应报文中 不含实体的主体部分

​ 三、206 Partial Content:示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求

3XX 重定向

​ 一、301 Moved Permanently:永久性重定向。该状态码表示请求的资源已被分配了新的 URI

​ 二、302 Found:临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户本次可以使用新的 URL访问

​ 三、303 See Other:码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源

​ 四、304 Not Modified:客户端发送附带条件的请求时,服务器端允许请求访 问资源,但未满足条件的情况

​ 五、307 Temporary Redirect:临时重定向。该状态码与 302 Found 有着相同的含义

4XX 客户端错误

​ 一、400 Bad Request:请求报文中存在语法错误

​ 二、401 Unauthorized:码表示发送的请求需要有通过 HTTP 认证,另外若之前已进行过 1 次请求,则表示 用 户认证失败

​ 三、403 Forbidden:请求资源的访问被服务器拒绝了

​ 四、404 Not Found:表明服务器上无法找到请求的资源

5XX 服务器错误

​ 一、500 Internal Server Error:服务器端在执行请求时发生了错误

​ 二、503 Service Unavailable:服务器暂时处于超负载或正在进行停机维护

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

用单台虚拟主机实现多个域名

​ 一、使用虚拟主机的功能,则可以 假想已具有多台服务器

通信数据转发程序 :代理、网关、隧 道

​ 二、代理:代理是一种有转发功能的应用程序,接收由客户端发送的请求并转发给服务器,同时 也接收服务器返回的响应并转发给客户端

​ 三、网关:网关是转发其他服务器通信数据的服务器

​ 四、隧道:隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方 通信连接的应用程序

保存资源的缓存

​ 一、缓存是指代理服务器或客户端本地磁盘内保存的资源副本

​ 二、缓存的有效期限

​ 三、客户端的缓存

第六章:http 报文首部

HTTP 报文首部

​ 一、首部内容为客 户端和服务器分别处理请求和响应提供所需要的信息。对于客户端用户来说,这些信息中的大部分内容都无须亲自查看

​ 二、HTTP 首部字段结构

​ HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号“:” 分 隔(如:Content-Type: text/html)

​ 4 种 HTTP 首部字段类型:通用首部字段(General Header Fields),请求首部字段(Request Header Fields),响应首部字段(Response Header Fields),实体首部字段(Entity Header Fields)

​ 三、HTTP/1.1 通用首部字段
在这里插入图片描述

​ 四、HTTP/1.1 请求首部字段
在这里插入图片描述

​ 五、HTTP/1.1响应首部字段 在这里插入图片描述

​ 六、HTTP/1.1 实体首部字段
在这里插入图片描述

​ 七、非 HTTP/1.1 首部字段,Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段

第七章:确保 Web 安全的 HTTPS

HTTP 的缺点

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

​ 二、不验证通信方的身份,因此有可能遭遇伪装

​ 三、无法证明报文的完整性,所以有可能已遭篡改

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

​ 一、HTTP 加上加密处理和认证以及完整性保护后即是 HTTPS

​ 三、使用 HTTPS 通信时,不再用 http://,而是改用 https://

​ 四、HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL和 TLS 协议代 替而已

​ 五、通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通 信,再由 SSL和 TCP 通信
在这里插入图片描述

SSL 和 TLS

​ 一、HTTPS 也存在一些问题,那就是当使用 SSL时,它的处理速度 会变慢,和使用 HTTP 相比,网络负载可能会变慢 2 到 100 倍

​ 二、,如果是非敏感信息则使用 HTTP 通信,只有在包含个人信息 等敏感数据时,才利用 HTTPS 加密通信

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

HTTP 使用的认证方式

​ 一:BASIC 认证(基本认证)

​ 1、是从 HTTP/1.0 就定义的认证方式

​ 2、密码和账号为:“账号:密码” 的形式,中间用 冒号隔开,转为 base64 后写入 首部字段 Authorization 后 发送 请求

​ 3、服务器接收到包含首部字段 Authorization 的请求 会对认证信息的正确性进行校验,如果校验成功,返回包含 Request_URI 资源的响应

​ 4、在 HTTP 等非加密通信的线路上进行 BASIC 认证,安全性很低

​ 5、一般浏览器无法 实现认证注销操作

​ 二:DIGEST 认证(摘要认证)

​ 1、不会像 BASIC 认证那样直接发送明文密 码

​ 2、首部字段 Authorization 内必须包含 username、realm、nonce、uri 和 response 的字段信息

​ 3、DIGEST 认证提供了高于 BASIC 认证的安全等级,但和 https 的客户端认证相比依旧很弱

​ 三:SSL 客户端认证

​ 1、SSL客户端认证则可以避免用户账号密码被盗,服务器可确认访问是否 来自自已登录的客户端

​ 四:FormBase 认证(基于表单认证)

​ 1、基于表单的认证方法并不是在 HTTP 协议中定义的。客户端会向服务 器上的 Web 应用程序发送登录信息(Credential),按登录信息的验 证结果认证

​ 2、基于表单认证的标准规范尚未有定论,一般会使用 Cookie 来管理 Session(会话)

​ 3、为减轻跨站脚本攻击(XSS)造成的损失,建议事先在 Cookie 内加上 httponly 属性。

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

http 的瓶颈

​ 一、一条连接上只可发送一个请求

​ 二、请求只能从客户端开始。客户端不可以接收除响应以外的指 令

​ 三、请求 / 响应首部未经压缩就发送。首部信息越多延迟越大。

​ 四、发送冗长的首部。每次互相发送相同的首部造成的浪费较 多

​ 五、可任意选择数据压缩格式。非强制压缩发送

Ajax 的解决方法

​ 一、通过使用 Ajax 的核心技术 XMLHttpRequest 从加载完毕的 web 页面上发送请求,更新局部页面

​ 二、利用 Ajax 实时地从服务器获取内容,有可能会导致大量请求产 生。另外,Ajax 仍未解决 HTTP 协议本身存在的问题

Comet 的解决方法

​ 一、一旦服务器端有内容更新了,Comet 不会让请求等待,而是直接给客 户端返回响应

​ 二、Comet 是一种通过延迟应答,模拟实现服务器向客户端推送(Server Push)的工能

​ 三、为 了实现推送功能,Comet 会先将响应置于挂起状态,当服务器端有内 容更新时,再返回该响应

​ 四、由于要保存响应,连接事件也变长了,为维持连接回消耗跟多的资源,另外,Comet 也仍未解决 HTTP 协议本身存在的问题

SPDY的设计与功能

​ 一、SPDY 没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与传输层之 间通过新加会话层的形式运作,并且 SPDY 规定 通信中使用 SSL

​ 一、SPDY 以会话层的形式加入,控制对数据的流动,但还是采用 HTTP 建立通信连接。因此,可照常使用 HTTP 的 GET 和 POST 等方 法、 Cookie 以及 HTTP 报文等
在这里插入图片描述

​ 三、SPDY 的特点:

​ 1、多路复用流:通过单一的 TCP 连接,可以无限制处理多个 HTTP 请求,无限制地并发处理请求

​ 2、赋予请求优先级:可以给请求逐个分配优先级顺序

​ 3、压缩 HTTP 首部:压缩 HTTP 请求和响应的首部,减少数据包数量和发送字节数

​ 4、推送功能:支持服务器主动向客户端推送数据的功能

​ 5、服务器提示功能:服务器可以主动提示客户端请求所需的资源,此在资源已缓存等情况下,可以避免 175 发送不必要的请求

​ 四、SPDY 目前的一些局限性

​ 1、因为 SPDY 基本上只是将单个域名( IP 地址)的通信多路复用,所 以当一个 Web 网站上使用多个域名下的资源,改善效果就会受到限 制。

​ 2、该技术导入实际的 Web 网站却 进展不佳

​ 3、SPDY 的确是一种可有效消除 HTTP 瓶颈的技术,但很多 Web 网站存 在的问题并非仅仅是由 HTTP 瓶颈所导致

WebSocket 使用浏览器进行全双工通信

​ 一、推送功能
​ 1、支持由服务器向客户端推送数据的推送功能

​ 二、减少通信量

​ 1、只要建立起 WebSocket 连接,就希望一直保持连接状态

​ 2、和 HTTP 相 比,不但每次连接时的总开销减少,而且由于 WebSocket 的首部信息 很小,通信量也相应减少了

​ 3、为了实现 WebSocket 通信,在 HTTP 连接建立之后,需要完成一 次“握手”(Handshaking)的步骤

​ 4、握手请求:需要用的 http 的 Upgrade 首部字段,告知服务器通信洗衣发生改变,以达到 握手的目的

​ 5、握手响应:对于之前的请求,返回状态码 101 Switching Protocols 的响应

​ 三、WebSocket API

HTTP/2.0
Web 服务器管理文件的 WebDAV

​ 一、是一个可对 Web 服务器上的内容直接进 行文件复制、编辑等操作的分布式文件系统

​ 二、除了创建、删除文件等基本功能,还具备文件创建者管理、文件编 辑过程中禁止其他用户内容覆盖的加锁功能,以及对文件内容修改的 版本控制功能

第 十 章 构建 Web 内容的技术

HTML

​ 一、Web 页面几乎全由 HTML 构建

​ 二、通过 css 层叠样式表 可以指定如何展示 HTML 内的 各种元素

动态 HTML

​ 一、使用客户端脚本语言将静态的 HTML 内容变成动态的

​ 二、通过 DOM 来操作 HTML 文档

Web 应用

​ 一、Web 应用是指通过 Web 功能提供的应用程序。比如购物网站、网上 银行、SNS、BBS、搜索引擎和 e-learning 等

​ 二、Servlet 是一种能在服务器上创建动态内容的程序。Servlet 是用 Java 语言实现的一个接口,属于面向企业级 Java

数据发布的格式及语言

​ 一、XML 是一种可按应用作为目标进行扩展的通用标记语言

​ 二、JSON 是一种以 JavaScript(ECMAScript)的对象表示法为基础的轻量级数据标记语 言

第 十一 章 Web 的攻击技术

针对 Web 的攻击技术

​ 一、来自互联网的攻击大多是冲着 Web 站点来的,它们大多把 Web 应用作为攻击目标

​ 二、HTTP 本身不具备 管理、加密处理等安全性方面的功能,开发者需要自行设计并开发认证及会话管理功能来满足 Web 应用的安全

​ 三、在 HTTP 请求报文内加载攻击代码,就能发起对 Web 应用的攻击

​ 四、对 Web 应用 的 攻击模式有两种:主动攻击、被动攻击

​ 1、以服务器为目标的主动攻击是指攻击者直接访问 Web 应用,把攻击代码传入的攻击模式

​ 2、以服务器为目标的被动攻击是指利用圈套策略执行攻击代码的攻 击模式

​ 五、跨站脚本攻击,通过存在安全漏洞的 Web 网站注册用户的浏览器内运行非法的 HTML 标签 或 javaScript 进行的一种攻击

​ 1、利用虚假输入表单骗取用户个人信息

​ 2、利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下, 帮助攻击者发送恶意请求

​ 3、显示伪造的文章或图片

​ 六、SQL 注入攻击

​ 1、Web 应用使用的数据库,通 过运行非法的 SQL而产生的攻击

​ 七、OS 命令注入攻击

​ 1、通过 Web 应用,执行 非法的操作系统命令达到攻击的目的

​ 八、HTTP 首部注入攻击

​ 1、攻击者通过在响应 首部字段内插入换行,添加任意响应首部或主体的一种攻击

附件

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值