首页 > 其他分享 >从输入URL到页面加载发生了什么?

从输入URL到页面加载发生了什么?

时间:2023-05-25 17:14:12浏览次数:38  
标签:HTTP 请求 URL 加载 ACK 客户端 数据包 服务端 页面

1、首先进行DNS域名解析,目的是找到对应的ip地址

DNS解析过程:

首先搜索浏览器自身的DNS缓存-----》没有找到则去本机的host文件中找-------》发起DNS递归查询,先查本地域名服务器———》根域名服务器———》com顶级域名服务器

直到最后本地域名服务器得到google的IP地址并把它缓存到本地,供下次查询使用。

 2、得到IP地址后进行TCP三次握手建立连接

第一次握手:客户端向服务器发送带有SYN标志的数据包,然后客户端进入SYN_SEND 状态

第二次握手:服务端向客户端发送带有SYN+ACK标志的数据包,服务端进入SYN_RECV 状态

第三次握手:客户端向服务端发送带有ACK标志的数据包,客户端和服务器端都进入ESTABLISHED 状态

为什么需要三次握手:确保双方的发送和接收都正常

 

 3、客户端向服务端发起HTTP请求,发送到服务器端口号为80的端口,如果是HTTPS请求则发送到443端口

HTTP和HTTPS区别:

1、HTTP是明文传输,HTTPS是具有安全性的SSL/TLS加密传输协议

SSL:安全套接层,在传输层与应用层之间对网络传输进行加密,SSL分为两层:

SSL记录协议:建立在TCP协议之上,负责数据加密、封装;

SSL握手协议:建立在SSL记录协议之上,负责传输前对通讯双方进行身份验证、协商加密算法、交换加密秘钥等。

HTTP请求格式由三部分组成:1请求行  2.请求头  3.request body。

(1)请求行分为三个部分:请求方法、URL和协议版本

1)请求方法:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。

GET&POST区别:

1、GET表示从服务器获取数据;POST可以向服务器发送数据和下载数据

2、GET会把参数写在URL里,不安全但高效;POST把数据写在request body,安全但不高效

3、GET对参数的长度有限制,而POST对参数长度没有限制

2)URL:统一资源定位符,组成:<协议>://<主机>:<端口>/<路径>

 

3)协议版本,常用的有HTTP/1.0和HTTP/1.1

HTTP/1.0和HTTP/1.1的区别:

  • 连接方式 : HTTP 1.0 为短连接,HTTP 1.1 支持长连接。
  • 状态响应码 : HTTP/1.1 中新加入了大量的状态码,比如说,100 (Continue)——临时响应,在请求大资源前的预热请求,206 (Partial Content)——范围请求的标识码,409 (Conflict)——请求与当前资源的规定冲突,410 (Gone)——资源已被永久转移,而且没有任何已知的转发地址。
  • 缓存处理 : 在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。
  • 带宽优化及网络连接的使用 :HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  • Host 头处理 : HTTP/1.1 在请求头中加入了Host字段。
 

(2)请求头

4、服务器响应HTTP请求,调用相应的servlet并返回资源给客户端

http响应格式:状态行、响应头部、响应正文

 

状态行包括三部分:协议版本、状态码、状态码描述

状态代码为3位数字。
1xx:临时响应--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
3xx:重定向--要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误--服务器未能实现合法的请求。

 

响应正文就是html

5、浏览器对数据进行解析和渲染

6、通过四次挥手关闭TCP连接

 第一次挥手:客户端向服务端发送带有FIN标志的数据包,并进入FIN-WAIT-1状态

第二次挥手:服务端向客户端发送带有ACK标志的数据包,服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。

第三次挥手:服务端向客户端发送带有FIN标志的数据包,服务端进入 LAST-ACK 状态

第四次挥手:客户端向服务端发送带有ACK标志的数据包,并进入TIME-WAIT状态,服务端在收到 ACK标志的数据包后进入 CLOSE 状态。此时,如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后,客户端也可以关闭连接了。

 

为什么要进行四次挥手:要保证双方都已经发送完数据,如果只进行三次挥手,服务端可能还有数据没发送完,所以必须双方都发送FIN标志的数据包才能保证双方都没有要发送的数据了。

为什么要等待2MSL再关闭连接:MSL是报文最长寿命,如果客户端发送完ACK后,2MSL内没有收到FIN报文则说明客户端已收到ACK,ACK没有发生报文丢失。

 

整个过程用到的协议有:

应用层协议:DNS/HTTP

 传输层协议:TCP    

网络层协议:IP/OSPF:动态路由协议,基于链路状态算法,考虑了链路的带宽、延迟等因素来选择最佳路径。/ARP地址解析协议:ARP 解决了 IP 地址转 MAC 地址

 

标签:HTTP,请求,URL,加载,ACK,客户端,数据包,服务端,页面
From: https://www.cnblogs.com/coooookie/p/17431881.html

相关文章

  • Spring Web URL 解析常见错误
    案例1:当@PathVariable遇到/在解析一个URL时,我们经常会使用@PathVariable这个注解。例如我们会经常见到如下风格的代码:(https://www.java567.com,搜"spring") @RestController @Slf4j publicclassHelloWorldController{  @RequestMapping(path="/hi1/{name}",......
  • 微信小程序点击按钮进行页面跳转
    下面是wxml代码<buttontype="primary"bindtap="go">跳转到list页面</button>下面是js代码go:function(){wx.navigateTo({url:'/pages/list/list',})},......
  • Flask005_定义 URL
    定义无参数的URL定义有参数的URLURL本质上是一个字符串,如果没有指定参数类型,那么参数传进视图参数时默认也是字符串类型。如果指定了参数类型,那么参数传给视图函数之前,会将参数转换为指定类型,这样视图函数拿到的参数就是经过转换后的。参数类型参数类型描述s......
  • Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。
    文章目录一.前言1.基础布局2.自动切换图片3.添加内容4.自动缩放,控件的显示和隐藏5.响应用户输入操作所有文章源码已整体打包上传至github,求星星!一.前言两年的大学生活马上就要结束了,马上面临实习,突然心血来潮,想着最后再来写一个项目来总结这几年所学的东西,难的项目,咱也不会,索......
  • Fdog系列(二):html写完注册页面之后怎么办,用java写后台响应呀。
    文章目录1.前言2.创建javaweb项目3.创建Server4.解决中文乱码问题5.响应后台数据目录Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。所有文章源码已整体打包上传至github,求星星!1.前言接着第一篇用html完成了注册页面,第二篇,我们来完成后台数据处理,需要用......
  • error: RPC failed; curl 55 OpenSSL SSL_write: Connection was aborted, errno 1005
    git初始化上传本地代码到远程出现异常造成的可能原因:1.网络原因2.无效的代理3.一次性推送的代码量过大 解决方法:1.网络原因可以等一段时间网络良好的情况上传2.无效代理的情况如下设置gitconfighttp.sslVerify"false"3.一次性推送代码量过大的情况如下设置,更改推......
  • c++ linux download file via libcurl
    1.Installlibcurlsudoaptinstallcurlcurl-ocpplibrary.pdfhttp://www.cesarkallas.net/arquivos/livros/informatica/cpp/The%20C%2B%2B%20Standard%20Library.pdf 2.#include<chrono>#include<ctime>#include<curl/curl.h>#includ......
  • SpringBoot 出现 Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘
    问题点1:如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。请求中传JSON时设置的Content-Type如果是application/json或者tex......
  • 一个form表单有两个按钮,分别提交到不同的页面
    一个form表单有两个按钮,分别提交到不同的页面html页面:<div><h3>静态资源管理</h3></div><div><divclass="bjui-searchBar"><spanstyle="font-size:14px;padding:3px;font-weight:300">文件名称:</span>......
  • APP中RN页面渲染流程-ReactNative源码分析
    在APP启动后,RN框架开始启动。等RN框架启动后,就开始进行RN页面渲染了。RN页面原生侧页面渲染的主要逻辑实现是在RCTUIManager和RCTShadowView完成的。通过看UIMananger的源码可以看到,UIMananger导出给JS端的API接口在对UI的操作上,基本都会同时对View和ShadowView进行操作。......