五层网络模型
- 应用层
- 包括HTTP,FTP...
- HTTP支持客户/服务器模式
- 简单快速有getpost方法
- 灵活,可以传输任意类型
- 无连接,每次连接只处理一个请求,收到应答就关闭
- 无状态,对于事物处理没有记忆能力
- 1.1有个长连接技术keepalive
- 为应用软件提供了很多服务request,get,post
- 屏蔽了很多网络传输细节
- 构建在TCP协议之上
- 包括HTTP,FTP...
- 传输层
- 包括TCP,UDP
- 向用户提供可靠的端到端服务
- 向高层屏蔽了数据通信的细节
- 网络层
- 为数据在节点之间传输创建逻辑链路
- 数据链路层
- 通信实体间建立数据链路的连接(电脑的0101类的)
- 物理层
- 定义物理设备如何传输数据
HTTP请求结构
抓包:
HTTP请求和响应的步骤
- 客户端连接导Web服务器,http默认端口80,建立套接字连接。
- 发送HTTP请求,客户端向服务器发送文本的请求报文,
- 服务器接受请求并返回HTTP响应,Web服务器解析请求,写到tcp套接字,由客户端读取
- 释放TCP连接
- 客户端浏览器解析HTML内容,查明状态代码,字符集,语法,并展示
浏览器输入一个URL,会发生什么
- DNS解析(浏览器根据URL,逐层查询DNS服务器缓存,解析URL中的域名所对应的IP地址)
- 缓存大致有:浏览器缓存、系统缓存、路由器缓存。。等
- IP地址和端口建立TCP连接(3次握手)
- 发送HTTP请求
- 服务器处理请求,并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束(四次挥手)
HTTP状态码
- 三位数组成,相应类别有5种
- 1xx:指示信息--表时请求已接收,继续处理
- 2xx:成功--表时请求已被成功接收、理解、接受
- 3xx:重定向--要完成请求必须进行更进一步的操作
- 4xx:客户端错误--请求由于发错误或请求无法实现
- 5xx:服务器端错误--服务器未实现合法的请求
HTTP三次握手
三次网络传输,才能创建http连接,确认连接过程,排除网络原因浪费网络资源。
图中就是大致的传输参数。
HTTP长连接
如何理解HTTP的无连接、短连接、长连接?:https://segmentfault.com/a/1190000015821798
浏览器请求头的Connection:(http1.1)keep-alive 希望服务端保持长连接(状态为close时,每次请求之后,请求就会关闭)
信道复用(http2),一个域名一个tcp连接,速度提升很大。
--资料来源:HTTP协议原理+实践Web开发工程师必学、剑指Java面试-Offer直通车