HTTP

6,289 阅读9分钟

首部

通用首部

1. Cache-Control/Pragma    控制缓存的行为
    Cache-Control: no-cache  HTTP/1.1
    Pragma: no-cache         HTTP/1.1之前版本
2. Connection       
     管理持久连接。不再转发的首部字段名
     Connection:close   HTTP/1.1版本默认连接,可断开
     Connection:Keep-Alive  HTTP/1.1之前版本的连接
3. Date             HTTP报文创建的日期和时间
4. Trailer          报文末端的首部一览
5. Transfer-Encoding 指定报文主体的传输编码方式
6. Upgrade          升级为其他协议
7. Via              代理服务器的相关信息
     报文经过代理或者网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发。该字段不仅用于追踪报文的转发,还可以避免请求回环的发生。所以必须在经过代理时附加该首部字段内容。
8. Warning          错误通知

请求首部

Accept               用户代理可处理的媒体类型
Accept-Charset       优先的字符集 
Accept-Encoding      优先的内容编码
Accept-Language      优先的语言
Authorization        Web认证信息
Expect               期待服务器的特定行为
From                 用户的电子邮箱地址
Host                 请求资源所在的服务器
If-Match             比较实体标记(ETag)
If-Mdoidied-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客户端程序的信息

响应首部

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    返回数据的备用地址
Content-MD5         Base64加密格式的内容 MD5校验值
Content-Range       内容的位置范围
Content-Type        内容的媒体类型
Expires             内容过期时间
Last-Modified       内容最后修改时间

非hHTTP/1.1首部字段

Cookie
Set-Cookie
Content-Disponsition

Cookie 服务首部字段

Set-Cookie 响应首部字段
Cookie     请求首部字段

Set-Cookie 字段的属性
    NAME=VALUE
    expires=DATE
    path=PATH
    domain=域名
    Secure
    HttpOnly

HTTPS和HTTP的区别主要如下:

  1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

  2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

  3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

  4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTPS 加密

HTTPS 还是通过了 HTTP 来传输信息,但是信息通过 TLS 协议进行了加密。
对称加密和非对称加密。

共享密钥加密/对称加密

 加密和解密同用一个密钥的方式。

公开密钥加密/非对称加密

一把为私钥(私有密钥),一把为公钥(公开密钥),其中私有密钥不能让任何人得知,而公开密钥则可以随意公布。
发送密文的那一端,使用对方的公开密钥进行加密处理,对方接收到被加密的信息后,使用私钥对此密文进行解密。
利用这种方式,不需要发送用来解密的私钥。从而解决了共享密钥加密存在的问题。

HTTPS通信步骤

 客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。

  (1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

  (2)Web服务器收到客户端请求后,会传送一份包含公钥的网站证书信息给客户端。

  (3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

  (4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给服务器。

  (5)Web服务器利用自己的私钥解密出会话密钥。

  (6)Web服务器利用会话密钥加密与客户端之间的通信。

HTTP缺点

明文通信,内容易窃听; (通信加密 内容加密)

不验证通信方身份,可遭遇伪装(查明对手证书)

无法证明报文的完整性

相比HTTP,HTTPS有哪些缺点?

(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;

(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

tcp三次握手

假设主动发起请求的一端为客户端,被动连接的是服务端。

  1. 起初,两端都为close状态;
  2. 通信开始前,双方 create TCB。服务端创建完进入listen状态,等待客户端发送数据;
  3. 握手
    1. 第一次握手:客户端向服务端发送 连接请求报文 段,包含自身 数据通讯 初始序号,发送后客户端进入 syn-sent 状态;
    2. 第二次握手:服务端收到连接请求报文段,如果同意连接,就会发送一个包含自身 数据通讯 初始序号 的应答,发送后进入 syn-received 状态;
    3. 第三次握手:当客户端收到应答后,向服务端发送确认报文。客户端发送完这个报文后进入 established 状态,服务端收到这个应答后也进入established状态,此时连接建立成功。

4.挥手

TCP 是全双工的,在断开连接时两端都需要发送 FIN 和 ACK。

  1. 客户端认为数据发送完成,要向服务端发送连接释放请求。
  2. B 收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。
  3. B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进入 LAST-ACK 状态。 PS:通过延迟确认的技术(通常有时间限制,否则对方会误认为需要重传),可以将第二次和第三次握手合并,延迟 ACK 包的发送。
  4. A 收到释放请求后,向 B 发送确认应答,此时 A 进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进入 CLOSED 状态。当 B 收到确认应答后,也便进入 CLOSED 状态。
为什么 A 要进入 TIME-WAIT 状态,等待 2MSL 时间后才进入 CLOSED 状态?

为了保证 B 能收到 A 的确认应答。若 A 发完确认应答后直接进入 CLOSED 状态,如果确认应答因为网络问题一直没有到达,那么会造成 B 不能正常关闭。

Flags

标志位表示当前数据包的类型: SYN: synchronous建立联机 ACK: acknowledgement确认 (只能为1) PSH: push传送 FIN: finish结束 RST: reset重置 URG: urgent紧急

get 和 post

  1. 编码格式不同
  2. 长度限制不同
  3. get可缓存
  4. post安全性高

TCP的持久化连接

1. HTTP 协议的初始版本中, 每进行一次 HTTP 通信就要断开一次 TCP连接。
   只要一方没有明确提出断开连接,则保持TCP连接。

2. 好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,
   减轻了服务器端的负载。 另外, 减少开销的那部分时间, 使 HTTP
   请求和响应能够更早地结束, 这样 Web 页面的显示速度也就相应提高了。在
   HTTP/1.1 中, 所有的连接默认都是持久连接, 但在 HTTP/1.0内并未标准化。
   虽然有一部分服务器通过非标准的手段实现了持久连接,但服务器端不一定能够支持持久连接。 
   毫无疑问, 除了服务器端, 客户端也需要支持持久连接。

TCP的管线化

从前发送请求后需要等待响应,管线化不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求, 而不需要一个接一个地等待响应了。

UDP 和 TCP 区别

首先 UDP 协议是面向无连接的,也就是说不需要在正式传递数据之前先连接起双方。然后 UDP 协议只是数据报文的搬运工,不保证有序且不丢失的传递到对端,并且UDP 协议也没有任何控制流量的算法,总的来说 UDP 相较于 TCP 更加的轻便。
UDP适合做直播。