360-静态Web服务器

340-python网络编程+330-HTML基础(前端)+331-CSS基础(前端) = Web开发

我们在使用网页的时候,不是服务端和客户端之间互相发信息,而是通过浏览器向服务器通信,交互的数据不仅仅有文字,还有图片、音频、视频等(超文本)

学HTTP协议是为了能自己搭建一个Web服务器

学习路线

HTTP协议:361-HTTP协议
能知道HTTP协议的作用
URL
能知道URL的组成部分
HTTP请求与相应报文
能使用浏览器开发者工具查看HTTP协议通信过程
能知道HTTP请求报文结构与相应报文的结构
搭建Python自带静态Web服务器
静态Web服务器开发
面向对象版Web服务器开发--FastAPI框架

浏览器访问网站的流程

  1. 域名解析
    • 当用户在浏览器中输入 “www.baidu.com” 后,浏览器首先会检查自身的缓存,看是否已经有对应的 IP 地址记录。如果缓存中没有,浏览器会向操作系统发送域名解析请求。操作系统也会先检查自己的缓存(如 DNS 缓存),若没有找到,就会向本地域名服务器(通常由互联网服务提供商 ISP 提供)发送 DNS(Domain Name System)查询请求。
    • 本地域名服务器会在自己的数据库中查找,如果没有找到对应的 IP 地址,它会向根域名服务器发送请求。根域名服务器会根据请求的顶级域名(如.com),将请求转发给对应的顶级域名服务器。顶级域名服务器再根据二级域名(如 baidu),将请求转发给授权域名服务器。授权域名服务器会返回 “www.baidu.com” 对应的 IP 地址(例如,假设是 14.215.177.38)给本地域名服务器,本地域名服务器再将这个 IP 地址返回给操作系统,操作系统最后将 IP 地址传递给浏览器。
  2. 建立 TCP 连接
    • 浏览器得到百度服务器的 IP 地址后,会使用 HTTP 协议(超文本传输协议)通过 TCP(传输控制协议)来建立与百度服务器的连接。浏览器会随机选择一个本地端口(如 1024 - 65535 之间的一个端口,假设是 50000),然后向百度服务器的 HTTP 服务端口(通常是 80 端口,对于加密的 HTTPS 则是 443 端口,这里以 HTTP 为例)发送一个 TCP 连接请求(SYN 包)。
    • 百度服务器收到请求后,会回复一个包含确认号(ACK)和自己的序列号(SYN)的数据包(SYN + ACK 包)。浏览器收到这个包后,会再发送一个确认包(ACK 包),完成三次握手,此时 TCP 连接建立成功。
  3. 发送 HTTP 请求
    • 连接建立后,浏览器会构建一个 HTTP 请求,这个请求包含请求行(如 GET / HTTP/1.1,表示使用 GET 方法请求根目录,HTTP 协议版本是 1.1)、请求头(包含如 User - Agent(浏览器类型和版本)、Accept - Language(接受的语言)等信息)和一个空行(用于分隔请求头和请求体)。如果是 POST 请求,请求体中还会包含要提交的数据。
    • 浏览器将这个 HTTP 请求通过已经建立的 TCP 连接发送给百度服务器。
  4. 服务器处理请求并返回响应
    • 百度服务器收到浏览器的 HTTP 请求后,Web 服务器软件(如 Apache、Nginx 等)会对请求进行处理。它会根据请求的内容(如请求的是网页、图片还是其他资源)在服务器的文件系统或数据库中查找对应的资源。
    • 如果找到资源,服务器会构建一个 HTTP 响应。响应包含响应行(如 HTTP/1.1 200 OK,表示协议版本是 1.1,状态码是 200,表示请求成功,状态信息是 OK)、响应头(包含如 Content - Type(内容类型,如 text/html 表示是 HTML 文档)、Content - Length(内容长度)等信息)和响应体(实际的网页内容或其他资源数据)。然后将这个 HTTP 响应通过 TCP 连接发送回浏览器。
  5. 浏览器解析并显示内容
    • 浏览器收到百度服务器返回的 HTTP 响应后,首先会检查响应行的状态码。如果状态码是 200,表示请求成功,浏览器会根据响应头中的 Content - Type 等信息来解析响应体中的内容。
    • 对于 HTML 内容,浏览器会开始解析 HTML 标签,下载并解析 CSS 样式表和 JavaScript 脚本,构建网页的文档对象模型(DOM),并根据 CSS 样式进行渲染,最终将网页内容显示给用户。如果响应中还包含其他资源(如图片、CSS 文件、JavaScript 文件等),浏览器会根据资源的 URL 再次发送 HTTP 请求来获取这些资源,重复上述流程,直到整个网页及其相关资源都被正确显示。
  6. 关闭 TCP 连接
    • 当浏览器完成网页内容的获取和显示后,它可能会选择关闭与百度服务器的 TCP 连接。浏览器会发送一个 FIN 包来请求关闭连接,百度服务器收到后会回复一个 ACK 包确认关闭请求,然后百度服务器也会发送一个 FIN 包,浏览器收到后再回复一个 ACK 包,完成四次挥手,TCP 连接正式关闭。