HTTP/HTTPS

HTTP/S(v1.0, v1.1, v2)是基于TCP的超文本传输协议

HTTP

http方法

报文结构




通用首部

Cache-Control指令

no-cache 和 no-store 的区别:no-cache 代表不缓存过期的资源,缓存会向源服务器进行有效期确认后再处理资源。no-store 才是真正的不缓存

Get和Post区别

  • Get参数放在url
  • Post参数放在request body
  • Get参数长度不超过2KB
  • Post参数长度无限制
  • Get只支持ASCII字符
  • Post支持标准字符集
  • 一次Get建立一次TCP连接
  • 一次Post请求建立两次连接(一次发送请求头,服务器返回100 continue,第二次发送request body,服务器返回200)

状态码

状态码 语义
2xx 成功
200 OK
204 No Content 请求处理成功,无返回内容
206 Partial Content 范围请求,返回部分内容
3xx 重定向
301 Moved Permanently 永久重定向
302 Found 临时重定向
303 See Other 要求使用GET请求另一个URI
304 Not Modified 未找到符合请求条件的资源,资源未修改
307 Temporary Redirect 临时重定向,不会将POST改为GET
4xx 客户端错误
400 Bad Request 请求报文存在错误语法
401 Unauthorized 请求资源需要认证
403 Forbidden 无理由拒绝
404 Not Found 没有请求资源
5xx 服务器错误
500 Internal Server Error 服务器执行请求时出错
503 Service Unavailable 服务器不可用(超负载或停机维护)

首部字段

通用首部字段

Cache-Control 控制缓存的行为

缓存请求指令
指令 参数 说明
no-cache 强制向源服务器再次验证
no-store 不缓存请求或响应的任何内容
max-age = [ 秒] 必需 响应的最大Age值
max-stale( = [ 秒]) 可省略 接收已过期的响应
min-fresh = [ 秒] 必需期 望在指定时间内的响应仍有效
no-transform 代理不可更改媒体类型
only-if-cached 从缓存获取资源
cache-extension - 新指令标记(token)
缓存响应指令
指令 参数 说明
public 可向任意方提供响应的缓存
private 可省略 仅向特定用户返回响应
no-cache 可省略 缓存前必须先确认其有效性
no-store 不缓存请求或响应的任何内容
no-transform 代理不可更改媒体类型
must-revalidate 可缓存但必须再向源服务器进行确认
proxy-revalidate 要求中间缓存服务器对缓存的响应有效性再进行确认
max-age = [ 秒] 必需 响应的最大Age值
s-maxage = [ 秒] 必需 公共缓存服务器响应的最大Age值
cache-extension - 新指令标记(token)

Connection 逐跳首部、连接的管理、删除指定首部

Date 创建报文的日期时间

Pragma 报文指令

Trailer 报文末端的首部一览

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

Upgrade 升级为其他协议

Via 代理服务器的相关信息

Warning 错误通知

请求首部字段

首部字段名 说明
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码
Accept-Language 优先的语言(自然语言)
Authorization Web认证信息
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
Host 请求资源所在服务器
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的原始获取方
TE 传输编码的优先级
User-Agent HTTP客户端程序的信息
  • TE: trailers 分块传输编码

响应首部字段

首部字段名 说明
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-MD 5实体主体的报文摘要
Content-Range 实体主体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间

端到端首部(End-to-end Header)

首部会转发给最终接受目标,且必须保存在由缓存生成的响应中

逐跳首部(Hop-by-hop Header)

单次转发有效的首部

  • Connection

  • Keep-Alive

  • Proxy-Authenticate

  • Proxy-Authorization

  • Trailer

  • TE

  • Transfer-Encoding

  • Upgrade

  • 在HTTP1.1中,若同时存在max-age指令和Expires首部,优先处理max-age指令,忽略Expires首部

  • 同一个主机部署多个域名虚拟机,使用Host首部区分

HTTPS

SSL连接握手过程

  1. Client->Client Hello ssl版本,加密算法及秘钥长度列表
  2. Server->Server Hello 从加密算法及秘钥长度列表中筛选出的加密算法及秘钥长度列表
  3. Server->Certificate 报文. 公匙证书
  4. Server-> Server Hello Done, 初阶段SSL握手协商结束
  5. Client->Client Key Exchange 使用3中的公匙加密的Pre-master secret随机密码串
  6. Client->Change Cipher Spec 此后通信使用Pre-master secret密匙加密
  7. Client-> Finished报文。连接开始所有报文整体校验值
  8. Server->Change Cipher Spec 报文
  9. Server->Finished 报文
  10. SSL连接建立完成,开始应用层协议通信
  11. 发送HTTP响应
  12. Client-> close_notify 报文
posted @ 2019-10-27 10:49  薛定谔的博客  阅读(175)  评论(0编辑  收藏  举报