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


问题2:HTTP支持的方法

问题3:HTTP状态码

问题4:代理、网关、隧道
代理 代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
网关 网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。比如:提供非HTTP协议服务。
隧道 隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序
问题5:HTTP报文


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 警告通知 格式: [警告码] [警告的主机:端口号]“[警告内容]”([日期时间])

- 请求首部字段
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信息,属于响应首部字段

- 其他首部字段
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)协议代替而已。
基于公钥加密,私钥解密的图解:

HTTPS的安全通信的机制

步骤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