前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >当你请求浏览器时发生了什么

当你请求浏览器时发生了什么

作者头像
opencode
发布2022-12-26 14:46:37
2320
发布2022-12-26 14:46:37
举报
文章被收录于专栏:知识同步

网络基础

首先你在浏览器输入一个链接,这个链接里包含着域名,请求资源的目录,参数

假如请求的就是https://www.bilibili.com/video/BV1Ai4y147MS

DNS域名解析

  • 首先查看本地缓存,是否有保存该记录,如果有,直接返回解析的IP
  • 若没有,则请求根服务器,也就是root服务器,服务器也会有缓存,如果缓存没有,然后会返回com服务器所在地址,让我们去请求这个服务器
  • 请求com服务器,一样有缓存机制,没找到则返回bilibili.com服务器的地址,这个得到的才是最终的服务器地址,返回的服务器IP,这个请求得到服务器IP的过程叫做DNS解析

应用层客户端发送http请求

http报文包括

报文首部(请求行+首部字段+其他)

代码语言:javascript
复制
//发送https://www.bilibili.com/video/BV1Ai4y147MS请求的报文
:authority: www.bilibili.com
:method: GET
:path: /video/BV1Ai4y147MS
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6
cache-control: max-age=0
cookie: CURRENT_FNVAL=16; _uuid=75CB3AB2-324E-9A06-18FD-1FC54F97B50421709infoc; buvid3=5461C39D-DED5-46B2-B14F-B0A8B23D7D7D155812infoc; rpdid=|(J|lmR|)lum0J'ul)||kmmJk; LIVE_BUVID=AUTO4215800299352148; sid=crvzlqgp; LIVE_PLAYER_TYPE=2; DedeUserID=23774625; DedeUserID__ckMd5=1108b837b6c041d8; SESSDATA=4bcb5668%2C1600843350%2Cb09e1*31; bili_jct=9002ce28a9808c7a03dd3d9433cc5237; CURRENT_QUALITY=80; PVID=1
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: none
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36

空行

报文主体(发送的数据,不一定有)

传输层(建立通讯)

服务器与客户端建立可靠的TCP连接

网络层(解析地址)

IP协议的作用是把TCP分割好的各种数据包传送给接收方。而要保证确实能传到接收方还需要接收方的MAC地址,也就是物理地址。IP地址和MAC地址是一一对应的关系,一个网络设备的IP地址可以更换,但是MAC地址一般是固定不变的。ARP协议可以将IP地址解析成对应的MAC地址。当通信的双方不在同一个局域网时,需要多次中转才能到达最终的目标,在中转的过程中需要通过下一个中转站的MAC地址来搜索下一个中转目标

链路层

在网络层找到对方的MAC地址后,就将数据发送到数据链路层传输。至此请求报文已发出,客户端发送请求的阶段结束

服务器接收报文

接收端服务器在链路层接收到数据后,删除该层的首部信息并向网络层传递,网络层将接收的数据向传输层传递,在传输层会将传输的数据按序号从组请求报文并传送给应用层。当数据传输到应用层才能算真正接收到由客户端发送过来的HTTP请求

服务器发送响应报文

响应报文和请求报文的形式差不多,不过返回了资源,response返回了网页源码

代码语言:javascript
复制
cache-control: no-cache, must-revalidate, max-age=0, no-store
content-encoding: gzip
content-type: text/html; charset=utf-8
date: Sun, 24 May 2020 05:19:17 GMT
gear: 1
idc: shjd
status: 200
vary: Origin,Accept-Encoding
vikingrmccache: 141696bv-productionvideoplay-index-av540627671-bv-productionvideoplay-page-av540627671
x-cache-webcdn: BYPASS from ks-gz-bgp-w-02

参考地址

https://www.bilibili.com/video/BV1Ai4y147MS

https://www.cnblogs.com/wxgblogs/p/5641643.html

https://www.cnblogs.com/jesse131/p/6215961.html

https://blog.csdn.net/qq_36520235/article/details/82559847

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DNS域名解析
  • 应用层客户端发送http请求
  • 传输层(建立通讯)
  • 网络层(解析地址)
  • 链路层
  • 服务器接收报文
  • 服务器发送响应报文
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档