首部
通用首部
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服务器通信时有以下几个步骤,如图所示。

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


- 客户端认为数据发送完成,要向服务端发送连接释放请求。
- B 收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。
- B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进入 LAST-ACK 状态。 PS:通过延迟确认的技术(通常有时间限制,否则对方会误认为需要重传),可以将第二次和第三次握手合并,延迟 ACK 包的发送。
- 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
- 编码格式不同
- 长度限制不同
- get可缓存
- 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适合做直播。