[关闭]
@ZeroGeek 2018-05-25T07:45:54.000000Z 字数 2236 阅读 678

HTTP协议讲解

Android


HTTP协议

请求流程

HTTP

OSI七层协议

(摘自百度百科)

应用层

网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

表示层

数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、DECOIC、加密格式等

会话层

建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话

传输层

定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

网络层

进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

数据链路层

建立逻辑连接、进行硬件地址寻址、差错校验 [2] 等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

物理层

建立、维护、断开物理连接。(由底层网络定义协议)

请求报文的构成

1.方法(HTTP/1.1)

2.URI

3.协议版本

4.可选的首部字段

5.内容实体

响应报文的构成

1.协议版本

2.状态码

3.状态码的原因短语

4.可选的响应首部字段

5.实体主体

TCP连接(三次握手)

HTTP协议是建立在TCP连接之后

  1. 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。(SYN:同步序列编号(Synchronize Sequence Numbers))
  2. 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  3. 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

断开TCP连接(四次挥手)

  1. 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  2. 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  3. 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  4. 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

在请求和响应报文中写入Cookie信息(SessionID)来控制客户端状态。
首部字段信息:Set-Cookie(响应报文中)
一般会使用Cookie来管理Session(会话)

内容编码(压缩文件)

多部分对象集合

Content-type

内容协商

首部字段重复会如何?

根据浏览器内部处理逻辑的不同,结果可能不一致。取决于处理顺序。

常见状态码

2XX 成功

3XX 重定向

4XX 客户端错误

5XX 服务器错误

协作的Web服务器

常见首部字段信息

HTTP缺点

HTTPS

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

HTTPS缺点

应该全部切换成HTTPS吗?

SPDY

旨在缩短web页面的加载时间(50%以上),位于会话层,控制对数据的流动

WebSocket

全双工通信

HTTP/2.0

目标是改善用户在使用Web时的速度体验

Web的攻击技术

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注