描述一次完整请求

请求

  1. 浏览器输入url地址,url地址为统一资源定位符,有着标准的格式,浏览器能够识别,可以统一处理。(应用层HTTP)
  2. 浏览器把url域名发送给dns服务器,dns服务器解析域名返回IP地址。(应用层HTTP)
  3. 因为http协议是基于tcp协议,接下来要建立tcp协议:三次握手建立tcp协议。(目前使用的 HTTP 协议大部分都是 1.1。在 1.1 的协议里面,默认是开启了 Keep-Alive 的,这样建立的 TCP 连接,就可以在多次请求中复用。)(传输层TCP)
  4. tcp连接建立以后,浏览器开始发送http请求,http的格式详情为:
    1. 请求行:方法(get/post/put/delete/...) url  http协议版本
    2.  ​​​​头部:header(k:v) 

      Content-Type:text/html;charset=utf-8 

      Cache-Control:max-age=n 缓存n秒后过期。经常配合If-Modified-Since使用,服务器对比上次修改时间以验证资源是否需要更新。

    3. 请求体:
  5. http发送,通过二进制流传递给tcp层。
  6. tcp层把二进制流分割成一个个报文段,并封装上源地址IP和目标地址I发送给下一层IP层。(传输层TCP)
  7. IP层查看目标IP是否跟自己在同一个局域网,如果是,就发送ARP协议来请求这个目标地址的mac地址,然后把源mac地址和目标mac地址放在mac头,发到网络层。如果不在同一个局域网,就需要发送到网关,还要需要发送 ARP 协议,来获取网关的 MAC 地址,然后将源 MAC 和网关 MAC 放入 MAC 头,发送出去。
  8. 网关收到包发现 MAC 符合,取出目标 IP 地址,根据路由协议找到下一跳的路由器,获取下一跳路由器的 MAC 地址,将包发给下一跳路由器。这样路由器一跳一跳终于到达目标的局域网。这个时候,最后一跳的路由器能够发现,目标地址就在自己的某一个出口的局域网上。于是,在这个局域网上发送 ARP,获得这个目标地址的 MAC 地址,将包发出去。
  9. 目标的机器发现 MAC 地址符合,就将包收起来;发现 IP 地址符合,根据 IP 头中协议项,知道自己上一层是 TCP 协议,于是解析 TCP 的头,里面有序列号,需要看一看这个序列包是不是我要的,如果是就放入缓存中然后返回一个 ACK,如果不是就丢弃。
  10. TCP 头里面还有端口号,HTTP 的服务器正在监听这个端口号。于是,目标机器自然知道是 HTTP 服务器这个进程想要这个包,于是将包发给 HTTP 服务器。HTTP 服务器的进程看到,原来这个请求是要访问一个网页,于是就把这个网页发给客户端。

返回

  1. http返回报文,格式如下:状态行(200/404/502/...)  头部(Content-Type:text/html)     body体
  2. http服务器构造好返回报文后,发送给tcp传输层,tcp然后发送给IP层网络层,网络层传递给通过mac层。
  3. 客户端发现 MAC 地址符合、IP 地址符合,于是就会交给 TCP 层。根据序列号看是不是自己要的报文段,如果是,则会根据 TCP 头中的端口号,发给相应的进程。这个进程就是浏览器,浏览器作为客户端也在监听某个端口。
  4. 当浏览器拿到了 HTTP 的报文。发现返回“200”,一切正常,于是就从正文中将 HTML 拿出来。HTML 是一个标准的网页格式。浏览器只要根据这个格式,渲染展示网页。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值