URL
URL代表"Uniform Resource Locator"(统一资源定位符),是一个用于在互联网上定位资源的地址。URL是用来标识互联网上各种资源(如网页、图像、视频、文本文件等)的一种标准格式。它不仅指示了资源的位置,还可以包括一些描述如何获取该资源的信息。
一个标准的URL通常由以下几个部分组成:
-
协议(Protocol):URL的开头部分通常指定了用于访问资源的协议,如HTTP、HTTPS、FTP等。
-
主机名(Host):主机名指示了资源所在的服务器的域名或IP地址。例如,www.example.com或192.168.1.1。
-
端口号(Port):端口号是一个可选的部分,用于指定访问服务器上特定服务的端口。如果未指定,默认使用协议的默认端口,如80(HTTP)或443(HTTPS)。
-
路径(Path):路径表示服务器上资源的具体位置。它以斜杠(/)开头,后面可能跟着文件路径或目录结构。
-
查询参数(Query):查询参数是一些附加信息,以问号(?)开头,用于传递给服务器的参数。参数以键值对的形式存在,例如?key=value。
-
片段标识(Fragment):片段标识用于指示资源中的特定部分。它以井号(#)开头,通常在网页中用于定位页面中的锚点。
URL的一个示例:https://www.example.com:8080/path/page.html?key=value#section
浏览器处理 URL 的过程
当你在浏览器中输入一个URL(Uniform Resource Locator),例如 “https://www.example.com”,浏览器会执行一系列步骤来获取和显示网页内容。以下是详细的过程:
-
URL解析:
浏览器首先会解析输入的URL。它会分解URL,识别出协议(例如HTTP、HTTPS)、主机名(例如www.example.com)、端口号(如果没有指定,默认是协议的默认端口)、路径(例如/、/page等)以及查询参数(例如?key=value)。 -
DNS解析:
浏览器需要将主机名转换为IP地址,以便能够发送请求到正确的服务器。这个过程叫做DNS解析。浏览器会依次查询浏览器自身 DNS ,操作系统 DNS ,本地 hosts 文件和向域名服务器发送请求。以获取目标主机的IP地址。
其中,向域名服务器发送请求,向本地 DNS 服务器发送请求,依次为向根域名服务器、顶级域名服务器和权威域名服务器发送请求。举个例子:.
为根域名,com.
为顶级域名,baidu.com.
为权威域名。 -
建立TCP连接:
浏览器使用HTTP或HTTPS协议与服务器通信。对于HTTPS,还需要建立安全的SSL/TLS连接。浏览器会与服务器的IP地址建立TCP连接,这个过程包括三次握手(见前面的解释)。 -
发起HTTP请求:
浏览器向服务器发送HTTP请求,包括请求方法(GET、POST等)、路径、协议版本、请求头(User-Agent、Accept等)以及可能的请求体(POST请求中的数据)。浏览器在请求服务器获取资源时,会检查本地缓存以查看是否已经有副本存储在本地。
如果有,浏览器可能会发送一个条件请求(如条件GET请求),询问服务器资源是否已经被修改。
如果资源未被修改,服务器可以返回一个特定的状态码(例如304 Not Modified),浏览器可以直接从缓存中加载资源,而不必下载新副本。 -
服务器处理请求:
服务器接收到浏览器发送的请求后,会根据请求的内容进行处理。这可能涉及到从服务器的文件系统获取文件、与数据库交互获取数据等。 -
服务器返回HTTP响应:
服务器生成HTTP响应,包括状态码(例如200 OK、404 Not Found)、响应头(Content-Type、Content-Length等)以及响应体(网页的HTML内容等)。 -
浏览器接收响应:
浏览器接收到服务器的HTTP响应后,会对响应进行解析。如果响应中包含HTML内容,浏览器会解析HTML并开始构建DOM树,同时下载其中的CSS、JavaScript等资源。 -
渲染页面:
浏览器使用解析后的信息构建DOM树、CSS样式转化为浏览器可以理解的 styleSheets,计算出 DOM 节点的样式,然后将页面呈现在屏幕上。JavaScript代码会被V8引擎解析。全部编译为机器码之后会交给 CPU 处理。 -
关闭连接:
当浏览器完成渲染并处理完所有资源时,它会关闭与服务器的连接,释放相关资源,但可能会保持与服务器的长连接以获取进一步的资源(例如Ajax请求)。
这些步骤概括了浏览器输入URL后发生的主要过程。这个过程涉及多个网络协议和技术,使我们能够浏览网页并与远程服务器进行通信。