-
图解HTTP
-
第1章 了解 Web 及网络基础
-
TCP/IP协议族
-
TCP/IP是把与互联网相关联的协议集合起来的总称
-
层次化
-
应用层(FTP、DNS、HTTP协议)
-
应用层决定了向用户提供应用服务时的通信活动
-
-
传输层(TCP、UDP)
-
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输
-
-
网络层
-
网络层用来处理在网络上流动的数据包
-
-
数据链路层
-
用来处理连接网络的硬件部分
-
-
-
图示 IP 协议、 TCP 协议和 DNS 服务在使用HTTP 协议的通信过程中各自发挥了哪些作用
-
-
-
URI 和 URL
-
URI 用字符串标识某一互联网资源, 而 URL表示资源的地点(互联网上所处的位置)
-
URI( Uniform Resource Identifier,统一资源标识符)
-
绝对 URI 的格式
-
-
URL(Uniform Resource Locator, 统一资源定位符)
-
URL正是使用 Web 浏览器等 访问 Web 页面时需要输入的网页地址
-
-
-
-
第 2 章 简单的 HTTP 协议
-
HTTP 是不保存状态的协议
-
TTP 是一种不保存状态, 即无状态协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。 也就是说在 HTTP 这个级别, 协议对于发送过的请求或响应都不做持久化处理。
-
有了 Cookie 再用 HTTP 协议通信, 就可以管理状态了,Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态
-
-
-
告知服务器意图的 HTTP 方法
-
GET : 获取资源
-
指定的资源经服务器端解析后返回响应内容。
-
-
POST: 传输实体主体
-
虽然用 GET 方法也可以传输实体的主体, 但一般不用 GET 方法进行传输, 而是用 POST 方法。 虽说 POST 的功能与 GET 很相似, 但POST 的主要目的并不是获取响应的主体内容。
-
-
PUT: 传输文件
-
PUT 方法用来传输文件。 就像 FTP 协议的文件上传一样, 要求在请求报文的主体中包含文件内容, 然后保存到请求 URI 指定的位置。
-
-
HEAD: 获得报文首部
-
HEAD 方法和 GET 方法一样, 只是不返回报文主体部分。 用于确认URI 的有效性及资源更新的日期时间等。
-
-
DELETE: 删除文件
-
DELETE 方法用来删除文件, 是与 PUT 相反的方法。 DELETE 方法按请求 URI 删除指定的资源。
-
-
OPTIONS: 询问支持的方法
-
OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
-
-
TRACE: 追踪路径
-
TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。
-
-
CONNECT: 要求用隧道协议连接代理
-
CONNECT 方法要求在与代理服务器通信时建立隧道, 实现用隧道协议进行 TCP 通信。 主要使用 SSL(Secure Sockets Layer, 安全套层)和 TLS(Transport Layer Security, 传输层安全) 协议把通信内容加 密后经网络隧道传输
-
-
-
持久连接节省通信量
-
背景:HTTP 协议的初始版本中, 每进行一次 HTTP 通信就要断开一次 TCP连接。随着 HTTP 的普及, 文档中包含大量图片的情况多了起来
-
解决:HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接的方法。 持久连接的特点是, 只要任意一端没有明确提出断开连接, 则保持 TCP 连接状态。
-
好处:减少了 TCP 连接的重复建立和断开所造成的额外开销, 减轻了服务器端的负载。 另外, 减少开销的那部分时间, 使HTTP 请求和响应能够更早地结束, 这样 Web 页面的显示速度也就相应提高了。
-
-
-
第 3 章 HTTP 报文内的 HTTP 信息
-
请求报文及响应报文的结构
-
请求行:包含用于请求的方法, 请求 URI 和 HTTP 版本。
-
状态行:包含表明响应结果的状态码, 原因短语和 HTTP 版本。
-
首部字段:包含表示请求和响应的各种条件和属性的各类首部。
-
-
编码提升传输速率
-
报文主体和实体主体的差异
-
报文( message):是 HTTP 通信中的基本单位, 由 8 位组字节流(octet sequence,其中 octet 为 8 个比特) 组成, 通过 HTTP 通信传输。
-
实体( entity):作为请求或响应的有效载荷数据(补充项) 被传输, 其内容由实体首部和实体主体组成。
-
-
压缩传输的内容编码
-
常用的内容编码有以下几种:gzip( GNU zip)、compress( UNIX 系统的标准压缩)、deflate( zlib)、identity( 不进行编码)
-
执行范围请求时, 会用到首部字段 Range 来指定资源的 byte 范围
-
-
-
内容协商返回最合适的内容
-
内容协商技术有以下 3 种类型
-
服务器驱动协商( Server-driven Negotiation)
-
由服务器端进行内容协商。 以请求的首部字段为参考, 在服务器端自动处理。
-
-
客户端驱动协商( Agent-driven Negotiation)
-
由客户端进行内容协商的方式。 用户从浏览器显示的可选项列表中手动选择。 还可以利用 JavaScript 脚本在 Web 页面上自动进行上述选 择。
-
-
透明协商( Transparent Negotiation)
-
是服务器驱动和客户端驱动的结合体, 是由服务器端和客户端各自进行内容协商的一种方法
-
-
-
-
-
第 4 章 返回结果的 HTTP 状态 码
-
状态码的职责是当客户端向服务器端发送请求时, 描述返回的请求结果。
-
数字中的第一位指定了响应类别, 后两位无分类, 响应类别有以上 5种。只要遵守状态码类别的定义, 即使改变 RFC2616 中定义的状态码, 或服务器端自行创建状态码都没问题。
-
-
2XX 成功
-
2XX 的响应结果表明请求被正常处理了
-
200 OK
-
表示从客户端发来的请求在服务器端被正常处理了。
-
-
204 No Content
-
该状态码代表服务器接收的请求已成功处理, 但在返回的响应报文中不含实体的主体部分。 另外, 也不允许返回任何实体的主体。
-
一般在只需要从客户端往服务器发送信息, 而对客户端不需要发送新信息内容的情况下使用。
-
-
-
206 Partial Content
-
该状态码表示客户端进行了范围请求, 而服务器成功执行了这部分的GET 请求。 响应报文中包含由 Content-Range 指定范围的实体内容。
-
-
-
3XX 重定向
-
3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求
-
301 Moved Permanently
-
永久性重定向。 该状态码表示请求的资源已被分配了新的 URI, 以后应使用资源现在所指的 URI。 也就是说, 如果已经把资源对应的 URI 保存为书签了, 这时应该按 Location 首部字段提示的 URI 重新保存。
-
-
302 Found
-
临时性重定向。 该状态码表示请求的资源已被分配了新的 URI, 希望用户(本次) 能使用新的 URI 访问。
-
和 301 Moved Permanently 状态码相似, 但 302 状态码代表的资源不是被永久移动, 只是临时性质的。 换句话说, 已移动的资源对应的 URI 将来还有可能发生改变。
-
-
-
303 See Other
-
该状态码表示由于请求对应的资源存在着另一个 URI, 应使用 GET方法定向获取请求的资源
-
303 状态码和 302 Found 状态码有着相同的功能, 但 303 状态码明确表示客户端应当采用 GET 方法获取资源, 这点与 302 状态码有区 别。
-
-
-
304 Not Modified
-
该状态码表示客户端发送附带条件的请求 2 时, 服务器端允许请求访问资源, 但未满足条件的情况。
-
304 状态码返回时, 不包含任何响应的主体部分。 304 虽然被划分在 3XX 类别中, 但是和重定向没有关系
-
-
-
307 Temporary Redirect
-
临时重定向
-
该状态码与 302 Found 有着相同的含义。 尽管 302 标准禁止 POST 变换成 GET, 但实际使用时大家并不遵守。307 会遵照浏览器标准, 不会从 POST 变成 GET。 但是, 对于处理响应时的行为, 每种浏览器有可能出现不同的情况。
-
-
-
-
4XX 客户端错误
-
4XX 的响应结果表明客户端是发生错误的原因所在
-
400 Bad Request
-
该状态码表示请求报文中存在语法错误。 当错误发生时, 需修改请求的内容后再次发送请求。
-
-
401 Unauthorized
-
该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证) 的认证信息。另外若之前已进行过 1 次请求, 则表示用户认证失败。
-
-
403 Forbidden
-
该状态码表明对请求资源的访问被服务器拒绝了。
-
服务器端没有必要给出拒绝的详细理由, 但如果想作说明的话, 可以在实体的主体部分对原因进行描述, 这样就能让用户看到了。
-
-
-
404 Not Found
-
该状态码表明服务器上无法找到请求的资源
-
也可以在服务器端拒绝请求且不想说明理由时使用
-
-
-
-
5XX 服务器错误
-
5XX 的响应结果表明服务器本身发生错误
-
500 Internal Server Error
-
该状态码表明服务器端在执行请求时发生了错误。也有可能是 Web应用存在的 bug 或某些临时的故障
-
-
503 Service Unavailable
-
该状态码表明服务器暂时处于超负载或正在进行停机维护, 现在无法处理请求。 如果事先得知解除以上状况需要的时间, 最好写入RetryAfter 首部字段再返回给客户端。
-
-
-
-
第 5 章 与 HTTP 协作的 Web 服 务器
-
通信数据转发程序 : 代理、 网关、 隧道
-
代理
-
代理是一种有转发功能的应用程序, 它扮演了位于服务器和客户端“中间人”的角色, 接收由客户端发送的请求并转发给服务器, 同时也接收服务器返回的响应并转发给客户端。
-
-
网关
-
网关是转发其他服务器通信数据的服务器, 接收从客户端发送来的请求时, 它就像自己拥有资源的源服务器一样对请求进行处理。 有时客户端可能都不会察觉, 自己的通信目标是一个网关。
-
-
隧道
-
隧道是在相隔甚远的客户端和服务器两者之间进行中转, 并保持双方通信连接的应用程序。
-
-
-
-
第 6 章 HTTP 首部
-
HTTP 报文首部
-
HTTP 请求报文
-
HTTP 响应报文
-
-
HTTP 首部字段
-
HTTP 首部字段是由首部字段名和字段值构成的, 中间用冒号“:” 分隔
-
-
4 种 HTTP 首部字段类型
-
通用首部字段( General Header Fields)
-
请求报文和响应报文两方都会使用的首部
-
-
请求首部字段( Request Header Fields)
-
从客户端向服务器端发送请求报文时使用的首部。 补充了请求的附加内容、 客户端信息、 响应内容相关优先级等信息。
-
-
响应首部字段( Response Header Fields)
-
从服务器端向客户端返回响应报文时使用的首部。 补充了响应的附加内容, 也会要求客户端附加额外的内容信息。
-
-
实体首部字段( Entity Header Fields)
-
针对请求报文和响应报文的实体部分使用的首部。 补充了资源内容更新时间等与实体有关的信息。
-
-
-
其他首部字段
-
X-Frame-Options
-
首部字段 X-Frame-Options 属于 HTTP 响应首部, 用于控制网站内容在其他 Web 网站Frame 标签内的显示问题。 其主要目的是为了防止点击劫持(clickjacking) 攻击。
-
DENY : 拒绝
-
SAMEORIGIN : 仅同源域名下的页面(Top-level-browsingcontext) 匹配时许可
-
-
X-XSS-Protection
-
首部字段 X-XSS-Protection 属于 HTTP 响应首部, 它是针对跨站脚本攻击(XSS) 的一种对策, 用于控制浏览器 XSS 防护机制的开关。
-
0 : 将 XSS 过滤设置成无效状态
-
1 : 将 XSS 过滤设置成有效状态
-
-
DNT
-
首部字段 DNT 属于 HTTP 请求首部, 其中DNT 是 Do Not Track 的简称, 意为拒绝个人信息被收集, 是表示拒绝被精准广告追踪的一种方 法。
-
0 : 同意被追踪
-
1 : 拒绝被追踪
-
-
P3P
-
首部字段 P3P 属于 HTTP 相应首部, 通过利用 P3P(The Platform for Privacy Preferences, 在线隐私偏好平台) 技术, 可以让 Web 网站上的个人隐私变成一种仅供程序可理解的形式, 以达到保护用户隐私的目的
-
-
-
-
第 7 章 确保 Web 安全的HTTPS
-
共享密钥加密的困境
-
加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system) , 也被叫做对称密钥加密。
-
可究竟怎样才能安全地转交? 在互联网上转发密钥时, 如果通信被监听那么密钥就可会落入攻击者之手, 同时也就失去了加密的意义。 另外还得设法安全地保管接收到的密钥。
-
-
使用两把密钥的公开密钥加密
-
公开密钥加密方式很好地解决了共享密钥加密的困难。公开密钥加密使用一对非对称的密钥。 一把叫做私有密钥(private key) , 另一把叫做公开密钥(public key) 。 顾名思义, 私有密钥不能让其他任何人知道, 而公开密钥则可以随意发布, 任何人都可以获得。
-
使用公开密钥加密方式, 发送密文的一方使用对方的公开密钥进行加密处理, 对方收到被加密的信息后, 再使用自己的私有密钥进行解密。 利用这种方式, 不需要发送用来解密的私有钥,也不必担心密钥被攻击者窃听而盗走
-
公开密钥加密与共享密钥加密相比, 其处理速度要慢
-
-
HTTPS 采用混合加密机制
-
在交换密钥环节使用公开密钥加密方式, 之后的建立通信交换报文阶段则使用共享密钥加密式。
-
-
证明公开密钥正确性的证书
-
遗憾的是, 公开密钥加密方式无法证明公开密钥本身就是货真价实的公开密钥。为了解决上述问题, 可以使用由数字证书认证机构(CA Certificate Authority) 和其相关机关颁发的公开密钥证书。
-
-
-
第 8 章 确认访问用户身份的认证
-
核对的信息通常是
-
密码: 只有本人才会知道的字符串信息
-
动态令牌: 仅限本人持有的设备内显示的一次性密码
-
数字证书: 仅限本人( 终端) 持有的信息
-
生物认证: 指纹和虹膜等本人的生理信息
-
IC 卡等: 仅限本人持有的信息
-
-
HTTP 使用的认证方式
-
BASIC 认证( 基本认证)
-
DIGEST 认证( 摘要认证)
-
SSL 客户端认证
-
FormBase 认证( 基于表单认证)
-
此外, 还有 Windows 统一认证(Keberos 认证、 NTLM 认证)
-
-
-
《图解HTTP》大纲思维导图
于 2024-07-18 10:47:46 首次发布