介绍
- 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、攻击者通过在响应 首部字段内插入换行,添加任意响应首部或主体的一种攻击