🌐前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。
👉【点击跳转到网站:人工智能教程】
浏览器发送HTTP请求的过程
浏览器发送HTTP请求的过程是一个复杂但有序的步骤,主要包括以下几个阶段:
1.构建请求
用户在浏览器地址栏输入URL
并按下回车键,浏览器首先会构建HTTP请求行信息,包括请求方法(如GET、POST)、请求资源路径和HTTP版本(如HTTP/1.1)。
URL(Uniform Resource Locator,统一资源定位符)是一种用于标识某一处资源的地址,在互联网上用于定位信息所在的位置。它最初是由蒂姆·伯纳斯-李(Tim Berners-Lee)在1991年创建,并在1994年被互联网工程任务组(IETF)采纳为标准(RFC 1738)。URL的格式通常包括以下几个部分:
(1)协议:指定访问资源所使用的协议类型,如HTTP、HTTPS、FTP等。它告诉浏览器如何访问指定的资源。
(2)主机名:存放资源的服务器的域名系统(DNS)主机名或IP地址。它标识了资源所在的服务器的位置。
(3)端口号(可选):指定服务器上的端口号,用于访问资源。如果省略,则使用协议的默认端口,如HTTP的默认端口是80,HTTPS的默认端口是443。
(4)路径:指定资源在服务器上的路径。它告诉服务器需要访问哪个具体的资源。
(5)查询字符串(可选):提供额外的参数信息,用于指定对资源的进一步操作或过滤条件。它以问号(?)开始,后面跟随参数名和值,多个参数之间用与号(&)分隔。
(6)锚点(可选):也称为片段标识符,用于指定资源内部的一个特定位置。它以井号(#)开始,后面跟随锚点的名称。
URL是互联网上资源定位和访问的基础,通过URL,我们可以访问网页、图片、视频、文件等各种类型的资源。在Web开发中,URL的设计和管理对于网站的可用性和搜索引擎优化(SEO)都非常重要。
2.查找缓存
在发送请求之前,浏览器会检查本地缓存中是否有请求的资源。如果找到未过期的缓存资源,则直接返回该资源副本,结束请求。
浏览器缓存文件存储在用户配置文件的特定文件夹中,具体路径如下:
(1)Google Chrome:在Windows系统中,路径通常为C:\Users[用户名]\AppData\Local\Google\Chrome\User Data\Default\Cache23。
(2)Microsoft Edge:在Windows系统中,路径通常为C:\Users[用户名]\AppData\Local\Microsoft\Edge\User Data\Default\Cache2。
(3)Mozilla Firefox:在Windows系统中,路径通常为C:\Users[用户名]\AppData\Local\Mozilla\Firefox\Profiles[随机字符串].default\Cache23。
在macOS系统中,浏览器缓存通常位于~/Library/Caches/下的相应浏览器名称文件夹中1。
3.DNS解析
如果缓存查找失败,浏览器需要知道服务器的IP地址才能发起请求。此时,浏览器会进行DNS解析。
DNS解析是指将域名(如:
www.example.com
)转换为对应的IP地址(如:192.0.2.1
)的过程,它是互联网服务中的一个核心环节。DNS解析由分布式的DNS系统来管理,包括根域名服务器、顶级域名服务器、权威域名服务器和本地域名服务器等多个层级。通过DNS解析,用户可以通过简单易记的域名来访问互联网上的各种服务和资源,而无需记住复杂的IP地址。DNS解析不仅提高了用户访问互联网的便捷性,也是互联网基础设施的重要组成部分。
(1)浏览器首先会搜索自身的DNS缓存。
(2)如果缓存中没有找到,浏览器会搜索操作系统的DNS缓存。
(3)如果操作系统缓存中也没有,浏览器会向本地配置的DNS服务器(通常是互联网服务提供商提供的)发起DNS解析请求。
(4)DNS解析过程可能涉及递归查询,包括根DNS服务器、顶级域DNS服务器和权威DNS服务器,直到找到对应的IP地址。
4.建立TCP连接(三次握手)
浏览器使用解析得到的IP地址和端口号(默认HTTP为80端口),与服务器建立TCP连接。
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的运输层通信协议。在TCP/IP协议中,TCP协议通过三次握手(Three-way Handshake)来建立一个可靠的连接。
以下是三次握手的具体过程:
(1)客户端发送SYN
包请求建立连接。客户端发送一个TCP包,其中SYN(同步序列编号)标志位被设为1,表示这是一个连接请求。同时,客户端会随机生成一个初始序列号(Sequence Number),用于标识从这个TCP包开始的数据流。
(2)服务器响应SYN-ACK
包。服务器收到客户端的连接请求后,会发送一个应答的TCP包。这个包中SYN标志位也被设为1,同时ACK(确认应答)标志位也被设为1,表示这是一个对客户端连接请求的应答,并且服务器也同意建立连接。服务器同样会生成一个自己的初始序列号。
(3)客户端发送ACK
包,连接正式建立。客户端收到服务器的应答后,会再发送一个TCP包,其中ACK标志位被设为1,表示对服务器应答的确认。同时,这个包中还会包含对服务器初始序列号的确认(即服务器序列号+1)。
完成这三次握手后,客户端和服务器之间的TCP连接就建立了,它们可以开始传输数据。这个过程确保了双方都准备好进行数据传输,并且都知道了对方的初始序列号,从而可以正确地组装和排序接收到的数据包。
5.发送HTTP请求
(1)连接建立后,浏览器发送HTTP请求到服务器。
(2)请求报文包括请求行、请求头部(可选请求正文)。
(3)请求行包含请求方法、URL路径和HTTP版本。
(4)请求头部提供额外的信息,如主机名、用户代理、接受的内容类型等。
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式:
(1)GET
:请求指定的页面信息,并返回实体主体。
(2)HEAD
:类似于GET请求,但返回的响应中没有具体的内容,用于获取报头。
(3)POST
:向指定资源提交数据进行处理请求(例如提交表单或者上传文件),可能会导致新的资源的建立和/或已有资源的修改。
(4)PUT
:从客户端向服务器端传送的数据取代指定的文档内容。
(5)DELETE
:请求服务器端删除指定的页面。
(6)CONNECT
:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器端。
(7)OPTIONS
:允许客户端查看服务器端的性能。
(8)TRACE
:回显服务器端收到的请求,主要用于测试或诊断
6.服务器处理请求
(1)服务器接收到请求后,根据请求行中的路径和方法处理请求。
(2)解析请求行和请求头部。
(3)根据请求生成响应内容(如HTML页面、图片等)。
7.服务器发送响应
服务器处理完请求后,生成HTTP响应报文并通过TCP连接发送回客户端。响应报文包括状态行、响应头部和响应体。
HTTP请求的状态码是服务器对客户端请求的响应状态标识,由三位数字组成,分为五类:
(1)1xx
(信息性状态码):表示请求已被接受,需要继续处理。如:100 Continue,表示客户端应继续发送请求。
(2)2xx
(成功状态码):表示请求已成功被服务器接收、理解并处理。如:200 OK,表示请求成功。
(3)3xx
(重定向状态码):表示需要进一步操作以完成请求。如:301 Moved Permanently,表示请求的资源已永久移动到新的URL。
(4)4xx
(客户端错误状态码):表示请求包含语法错误或无法被服务器理解。如:404 Not Found
,表示请求的资源不存在。
(5)5xx
(服务器错误状态码):表示服务器在处理请求时遇到了错误。如:500 Internal Server Error,表示服务器内部错误。
8.客户端处理响应
(1)浏览器接收到服务器的响应后,根据响应头部中的信息处理响应体。
(2)解析HTML文档,并渲染页面。
(3)可能发出额外的请求来获取嵌入的资源(如CSS、JavaScript、图片等)。
9.关闭连接(四次挥手)
根据HTTP版本和连接头部,决定是否关闭TCP连接。
(1)HTTP/1.0默认每次请求后关闭连接,除非指定Connection: keep-alive
。
(2)HTTP/1.1默认保持连接,除非指定Connection: close
。
这个过程确保了客户端和服务器之间能够有效地交换信息,使用户能够访问和浏览Web内容。