HTTP 概述

http是网络资源的通讯协议, 是在web上进行数据交换的基础,是一种client-server协议。

Fetching_a_page.png
客户端与服务通过交换各自的消息(与数据流正好相反)进行交互。浏览器端发出的消息叫request; 服务端响应的消息叫做responses.

HTTP & layers.png

HTTP协议是一种可拓展的协议类型,属于应用层的协议,通过TCP或者TLS(加密的TCP连接)来传输数据。

HTTP的组件系统

http是一个client-server的协议: 通过一个实体发出请求,大多数是浏览器,也可以是一个爬虫引擎等
每一个请求发送到服务器,都会被服务返回对应的响应(response)。在请求与响应之间还存在很多proxies的实体。比如网管,caches等
Client-server-chain.png

HTTP的基本性质

【A】HTTP知识点梳理 - 图4

HTTP2与HTTP1.1的不同之处

  1. HTTP/2是二进制协议而不是文本协议。不再可读,也不可无障碍的手动创建,改善的优化技术现在可被实施。
  2. 这是一个复用协议。并行的请求能在同一个链接中处理,移除了HTTP/1.x中顺序和阻塞的约束。
  3. 压缩了headers。因为headers在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
  4. 允许服务器在客户端缓存中填充数据,通过一个叫服务器推送的机制来提前请求。

标识互联网上的内容

HTTP请求的内容被成为“资源”,每一个资源由URI(统一资源定位符)来进行标识。

URLS与URNS

URI的最常见形式是统一资源定位符,它被成为WEB地址。

URN是另外一种形式的URI,它通过特定命名空间中的唯一名称来标识资源。

统一资源标识符的语法 (URI)

http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument

http://

Protocol: 用于告诉浏览器使用何种协议。对于大部分WEB资源,通常使用HTTP协议或其安全版本,HTTPS协议。 浏览器也有很多其他协议,比如:

  1. mailto: 浏览器打开邮件客户端;
  2. ftp: 浏览器处理文件传输
  3. data: DATA URIS
  4. file: 指定主机上文件的名称
  5. http/https: 超文本传输协议/安全的超文本传输协议
  6. mailto: 电子邮件地址
  7. ssh: 安全shell
  8. tel: 电话
  9. urn: 同意资源名称
  10. view-source: 资源的源码
  11. ws/wss: (加密的)websocket连接

www.example.com

Domain Name ,是一个域名,也代表管理该域名的机构。 代表会向那一台主机发送请求。

:80

Port, 是一个端口,访问的Web服务器上的指向。HTTP协议的标准端口为80; HTTPS为443.只有这两种端口默认会被省略,否则端口是URI必须的部分

/path/to/myfile.html

Path to the file, Web服务器上资源的路径。 在web的早期, 类似这样的路径表示web服务器上的物理文件的路径。

?key1=value1&key2=value2

?key1=value1&key2=value2 是提供给 Web 服务器的额外参数。这些参数是用 & 符号分隔的键/值对列表。Web 服务器可以在将资源返回给用户之前使用这些参数来执行额外的操作。每个 Web 服务器都有自己的参数规则,想知道特定 Web 服务器如何处理参数的唯一可靠方法是询问该 Web 服务器所有者

#SomewhereInTheDocument

#SomewhereInTheDocument 是资源本身的某一部分的一个锚点。锚点代表资源内的一种“书签”,它给予浏览器显示位于该“加书签”点的内容的指示。 例如,在HTML文档上,浏览器将滚动到定义锚点的那个点上;在视频或音频文档上,浏览器将转到锚点代表的那个时间。值得注意的是 # 号后面的部分,也称为片段标识符,永远不会与请求一起发送到服务器

HTTP消息

HTTP消息是服务器与客户端之间交换数据的方式, 有两种类型的消息: 1. 请求(requests) 由客户端发送用来触发一个服务器上的动作; 2. 响应: 来自服务器的应答
HTTP消息由ASCII编码的多行文本构成。
HTTP请求和响应具有相似的结构, 由以下部分组成:

  1. 一行起始行用于描述要执行的请求,或者是对应的状态,成功或失败。这个起始行总是单行的。
  2. 一个可选的HTTP头集合指明请求或描述消息正文。
  3. 一个空行指示所有关于请求的元数据已经发送完毕。
  4. 一个可选的包含请求相关数据的正文 (比如HTML表单内容), 或者响应相关的文档。 正文的大小有起始行的HTTP头来指定。

HTTP/1.x的连接管理

在HTTP/1.x里有多种模型:1. 短连接,2. 长连接, 3. HTTP流水线
image.png

HTTP安全性

1. CSP

CSP(Content Securitory Policy): 内容安全策略,用于检测并削弱某些特定类型的攻击,包括跨站XSS及数据注入攻击等。 无论是数据盗取、网站内容污染还是散发恶意软件,这些攻击都是主要的手段。使CSP生效,在网络服务器返回Content-Security-Policy。
除此之外, <meta> 元素也可以被用来配置该策略, 例如

  1. <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

策略描述
一个策略由一系列策略指令所组成,每个策略指令都描述了一个针对某个特定类型资源以及生效范围的策略。你的策略应当包含一个default-src策略指令,在其他资源类型没有符合自己的策略时应用该策略(有关完整列表查看default-src )。一个策略可以包含 default-src 或者 script-src 指令来防止内联脚本运行, 并杜绝eval()的使用。 一个策略也可包含一个 default-srcstyle-src 指令去限制来自一个 <style> 元素或者style属性的內联样式

2. HPKP(HTTP Public KeyPining): HTTP公钥锁定(HPKP

一种安全功能,它告诉Web客户端将特定加密公钥与某个Web服务器相关联,以降低使用伪造证书进行MITM攻击的风险。

启用 HPKP

要为您的站点启用此功能,您需要在通过HTTPS访问站点时返回Public-Key-Pins HTTP标头:

  1. Public-Key-Pins: pin-sha256="base64=="; max-age=expireTime [; includeSubDomains][; report-uri="reportURI"]


3. HSTS(HTTP Strict Transport Security)

只允许浏览器采用HTTPS访问当前资源,而不能是HTTP

语法

  1. Strict-Transport-Security: max-age=<expire-time>
  2. Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
  3. Strict-Transport-Security: max-age=<expire-time>; preload

4. Cookie安全

HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。

创建Cookie

  1. 服务器收到http请求
  2. 服务器在响应头里面添加 HTTPHeader(“Set-Cookie”)
  3. 浏览器收到响应后通常会保存Cookie
  4. 之后对该服务器每一次请求中都通过HTTPHeader(“Cookie”)请求头部将Cookie信息发送给服务器,另外,Cookie 的过期时间、域、路径、有效期、适用站点都可以根据需要来指定。


定义Cookie的生命周期

  1. 会话期是最简单的Cookie,浏览器关闭之后则自动删除。(⚠️也存在部分浏览器可能会话保留功能)
  2. 持久性Cookie的生命周期取决于过期时间(Expires)或者有效期(Max-Age)指定的一段时间

限制访问Cookie


浏览器缓存策略图解

  1. 初次请求

image.png

  1. 第二次请求

image.png

参考
[1] MDN http知识点