网络-白话详解HTTP (二)

网络-白话详解HTTP (二)

HTTP目录

转接上篇 :白话详解HTTP (一)

四、TCP三次握手及四次挥手

  1. 基本术语
    包含 两个序号 (小写) 与六个标志位 (大写)。
    两个序号:
    (1)seq :32位,用来标识从TCP源到目的端的字节流,发起端发送数据时对此标记;
    (2)ack : 32位,只有确认标志位ACK为1时,确认信号ack才有效, ack =seq+1;
    标志位:
    (1) ACK : 确认标志位,确认序号有效;
    (2) SYN: 发起一个新连接;
    (3) FIN : 释放一个连接

  2. 三次握手流程
    第一次: 主机A给服务器B 发送自己的初始序号: seq=client_isn;
    第二次: 服务器B使用标志位ack 对A的数据包确认,同时告诉A:准备接收A下一条数据包,ack=client_in+1,告诉A自己的序列号: seq=sever_isn;
    第三次 :主机A告诉服务器B收到了确认消息准备建立连接,此条消息的序列号: seq=client_isn+1, 并准备接收B序列号:ack=sever_isn+1 的数据包;
    TCP三次握手图示

 注:为什么主机A还要再发一次确认?

原因是:为了避免网络延时造成的异常情况,防止已失效的连接请求报文段突然又传送到了 服务器B ,因而产生错误。如果没有第三次,B收到以为是失效的连接是新的连接一直等待A发数据,造成资源浪费。因此,三次握手保证A确认后B已经收到后,再建立之间连接。

  1. 四次挥手流程

    第一次:主机A发送一个FIN标志,告诉服务器:我Client端没有数据要发送给服务器了。但是如果服务器没有传完数据不用着急可以继续。 Client 进入 FIN_WAIT_1 状态。
    第二次: 服务B器收到 FIN 后,告诉客户端:我还没准备好,等我一会儿。发送一个 ACK 给 Client,确认序号为收到序号 + 1,Server进入 CLOSE_WAIT状态。
    第三次: 服务器B 完成传输后,发送FIN给主机A:好了,数据发完了,可以结束连接了。 Server进入 LAST_ACK状态.
    第四次:主机A收到FIN后,发送ACK给服务器:好的,我想再确认一下,如果你没收到ACK可以重传。服务器收到ACK就知道确认可以断开连接了,主机A等了2MSL后无回复知道服务端已正常关闭,也会关闭了。 四次挥手结束。

 注:(1)为什么建立连接三次握手,关闭连接四次挥手?

原因:这是因为服务器在 LISTEN 状态下,收到建立连接请求的 SYN 报文后,把 ACK 和 SYN 放在一个报文里发送给客户端。而关闭连接时,收到对方的 FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据。ACK 和 FIN 一般都会分开发送。

(2)为什么主机A等了2MSL后才关闭?

原因: MSL是最大报文生存时间
一是保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失;
二是防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。新的连接中不会出现旧连接的请求报文。

五、请求报文和响应报文的结构

请求报文指客户端发送数据产生的数据报文,响应报文指服务器返回的数据报文

  1. HTTP 请求报文
    HTTP 请求报文由四个部分组成 :请求行,请求头,空行, 请求数据。

(1) 请求行
请求行由请求方法、URL 和HTTP版本组成;如 GET /data/info.html HTTP/1.1

(2) 请求头 >header
请求头包含常见的请求头字段,大多数请求头并不是必须的,但POST请求Content-Length必须出现。

Accept : 浏览器可接受的MIME类型 (text…)
Reference: 客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)
Accept- Language: 浏览器所希望的语言种类
User-Agent : 包含发出请求的用户信息
Content -Type :
Host: 客户机通过这个头告诉服务器,想访问的主机名
Content - length : 表示请求消息正文的长度
Connection : 处理完这次请求后是否断开连接还是继续保持连接
cookie : 客户机再次访问后所带的记录片段。
range :可以请求实体的一个或者多个子范围 (限定访问范围)

(3) 空行: 通过一个空行,告诉服务器请求头部到此为止。
(4) 请求数据 :是GET,则此项为空;是POST,则此处存放的就是要提交的数据
请求报文

  1. HTTP 响应报文
    HTTP 响应报文由三个部分组成 :响应行,响应头,响应体。

(1)响应行
响应行由 协议版本、状态码、描述 组成;如:200、404;
(2) 响应头 >header
响应头用于描述服务器的基本信息,以及对数据的描述。
常见的响应头字段
server : 服务器应用程序软件的名称和版本
content -type :表示后面的文档属于什么MIME类型。
transfer- encoding : 浏览器数据的传送格式
date : 当前的GMT时间

(3)响应体 >body
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果是JS就是JS代码。
响应报文

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值