浏览器输入一个URL,发送一个HTTP请求都发送了什么


1.TCP/IP模型

说计算机网络必须得提一下,TCP/IP模型的4层结构。

应用层
传输层
网络层
网络接口层

2.各层常用协议

应用层:HTTP,HTTPS,FTP,DNS,SMTP…这可太多了
传输层:TCP协议,UDP协议,ICMP协议
网络层:IP协议,ARP协议
网络接口:…这物理层了我是不知道有啥协议了。

3.HTTP过程

3.1.DNS域名解析

a)首先会搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存)
b)如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的DNS缓存
c)如果还没有找到,那么尝试从 hosts文件里面去找
d)在前面三个过程都没获取到的情况下,就递归地去域名服务器去查找,就是各大运营商,过着谷歌之类的。

这位置和ping是一样的,我们ping一下百度试试…可以看到是个执行的是个ip地址。
在这里插入图片描述

3.2.TCP链接

这里就到传输层了,HTTP是用的TCP协议,这个比较可靠…ping用的是ICMP。

拿到域名对应的IP地址之后,User-Agent(一般指浏览器)会以一个随机端口(1024<端口<65535)向服务器的WEB程序(常用的有httpd,nginx)等的80端口。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间有各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终达到WEB程序,最终建立了TCP/IP的连接

顺便说些TCP3次握手吧…
过程就不说了,3次握手4次挥手。
TCP优点:
1.面向链接的
2.保证数据正确性
3.保证数据顺序

3.3.HTTP请求报文

建立TCP链接之后就可以发报文了
简单的说报文可以这么分一下
1)请求方法:get,post,put啥的…
2)请求URL:
3)HTTP协议及版本号
4)报文头:cookie
5)报文体:json

3.4.服务器端响应http请求,浏览器得到html代码

HTTP状态码分类
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

状态码:状态码用于表示服务器对请求的处理结果
几个常用的:
200成功
301,永久重定向,浏览器还是当前URL
302,临时重定向,新的URL
500,服务端内部错误
502,代理服务器联系不到后端服务器
504,后端服务器不能相应代理服务器
更多请见详情

3.5.获取HTML代码

浏览器拿到html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这是时候就用上 keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里面的顺序,但是由于每个资源大小不一样,而浏览器又是多线程请求请求资源,所以这里显示的顺序并不一定是代码里面的顺序。

3.6.渲染页面

最后,浏览器利用自己内部的工作机制,把请求的静态资源和html代码进行渲染,渲染之后呈现给用户
  浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念: reflow(回流)和repain(重绘)。DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为relow;当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。所以我们应该尽可能少的减少reflow和repain。
  JS的解析是由浏览器中的JS解析引擎完成的。JS是单线程运行,JS有可能修改DOM结构,意味着JS执行完成前,后续所有资源的下载是没有必要的,所以JS是单线程,会阻塞后续资源下载
  自此一次完整的HTTP事务宣告完成.

4.总结

1.DNS域名解析
2.TCP链接
3.HTTP请求报文
4.响应HTTP请求
5.获取HTML代码
6.渲染页面,展现给用户
  
参考:
https://www.runoob.com/http/http-status-codes.html
https://blog.csdn.net/yutiab69/article/details/82869239
https://www.cnblogs.com/xuzekun/p/7527736.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值