HTTP基础知识

643 阅读7分钟

image-20200418000538652

问题1:URI/URL/URN的区别

与 URI(统一资源标识符)相比,我们更熟悉 URL(UniformResource Locator,统一资源定位符)。URL 正是使用 Web 浏览器等访问Web 页面时需要输入的网页地址。

URI

image-20200417101908232

image-20200417233951064

问题2:HTTP支持的方法

image-20200417103633191

问题3:HTTP状态码

image-20200417234832823

问题4:代理、网关、隧道

代理 代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

网关 网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。比如:提供非HTTP协议服务。

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

问题5:HTTP报文

image-20200417112549013

image-20200417112649964

HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成 2 种类型。 端到端首部(End-to-end Header) 分在此类别中的首部会转发给请求 / 响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。 逐跳首部(Hop-by-hop Header) 分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1 和之后版本中,如果要使用 hop-by-hop 首部,需提供 Connection 首部字段。 下面列举了 HTTP/1.1 中的逐跳首部字段。除这 8 个首部字段之外,其他所有字段都属于端到端首部。 Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade

  • 通用首部字段

Cache-Control 控制缓存的行为

Connection 逐跳首部、连接的管理 ● 控制不再转发给代理的首部字段● 管理持久连接

Date 创建报文的日期时间

Pragma 报文指令,该首部字段属于通用首部字段,但只用在客户端发送的请求中。客户端会要求所有的中间服务器不返回缓存的资源。Pragma: no-cache

Trailer 报文末端的首部一览

Transfer-Encoding 指定报文主体的分块传输编码方式 ·

Upgrade 升级为其他协议

Via 是为了追踪客户端与服务器之间的请求和响应报文的传输路径。

Warning 警告通知 格式: [警告码] [警告的主机:端口号]“[警告内容]”([日期时间])

image-20200417121037634

  • 请求首部字段

Accept 用户代理可处理的媒体类型

Accept-Charset 优先的字符集

Accept-Encoding 优先的内容编码

Accept-Language 优先的语言(自然语言)

Authorization Web认证信息

Expect 期待服务器的特定行为

From 用户的电子邮箱地址

Host 请求资源所在服务器

If- 附带条件的请求

If-Match 比较实体标记(ETag)

If-Modified-Since 比较资源的更新时间

If-None-Match 比较实体标记(与If-Match相反)

If-Range 资源未更新时发送实体Byte的范围请求

If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)没有发生更新的可以被请求

Max-Forwards 最大传输逐跳数

Proxy-Authorization 代理服务器要求客户端的认证信息

Range 实体的字节范围请求

Referer 对请求中URI的原始获取方,即:只要查看Referer就能知道请求的URI是从哪个Web页面发起的

TE 传输编码的优先级

User-Agent 客户端程序的信息

  • 响应首部字段

Accept-Ranges 是否接受字节范围请求

Age 推算资源创建经过时间

ETag 资源的匹配信息

Location 令客户端重定向至指定URI

Proxy-Authenticate 代理服务器对客户端的认证信息

Retry-After 对再次发起请求的时机要求,告知客户端应该在多久之后再次发送请求

Server HTTP服务器的安装信息

Vary 代理服务器缓存的管理信息

WWW-Authenticate 服务器对客户端的认证信息

  • 实体首部字段

Allow 资源可支持的HTTP方法

Content-Encoding 实体主体适用的编码方式

Content-Language 实体主体的自然语言

Content-Length 实体主体的大小(单位 :字节)

Content-Location 替代对应资源的URI

Content-MD5 实体主体的报文摘要

Content-Range 实体主体的位置范围

Content-Type 实体主体的媒体类型

Expires 实体主体过期的日期时间

Last-Modified 资源的最后修改日期时间

  • 与 Cookie 有关的首部字段

Cookie 服务器接收到的Cookie信息,属于请求首部字段

Set-Cookie 开始状态管理所使用的Cookie信息,属于响应首部字段

image-20200417215636235

  • 其他首部字段

X-Frame-Options:用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击。

X-XSS-Protection:它是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器 XSS 防护机制的开关。

DNT:是表示拒绝被精准广告追踪的一种方法。

P3P:可以让 Web 网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的。

问题6:HTTPS

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

HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。

基于公钥加密,私钥解密的图解

image-20200417235339908

HTTPS的安全通信的机制

image-20200417224114237

步骤1:客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。

步骤2:服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。

步骤3:之后服务器发送Certificate报文。报文中包含公开密钥证书。

步骤4:最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。

步骤5:SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。

步骤6:接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。

步骤7:客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。

步骤8:服务器同样发送Change Cipher Spec报文。

步骤9:服务器同样发送Finished报文。

步骤10:服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。

步骤11:应用层协议通信,即发送HTTP响应。

步骤12:最后由客户端断开连接。断开连接时,发送close notify