《go web 编程》第三章 web基础:HTTP 协议是无状态
2022-08-12 本文已影响0人
bycall
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。
HTTP 是一个无状态的面向连接的协议,无状态不代表 HTTP 不能保持 TCP 连接,更不能代表 HTTP 使用的是 UDP 协议(面对无连接)。
从 HTTP/1.1 起,默认都开启了 Keep-Alive 保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的 TCP 连接。
Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同服务器软件(如 Apache)中设置这个时间。
请求实例
一次请求的 request 和 response
上面这张图我们可以了解到整个的通讯过程,同时细心的读者是否注意到了一点,一个 URL 请求但是左边栏里面为什么会有那么多的资源请求 (这些都是静态文件,go 对于静态文件有专门的处理方式)。
这个就是浏览器的一个功能,第一次请求 url,服务器端返回的是 html 页面,然后浏览器开始渲染 HTML:当解析到 HTML DOM 里面的图片连接,css 脚本和 js 脚本的链接,浏览器就会自动发起一个请求静态资源的 HTTP 请求,获取相对应的静态资源,然后浏览器就会渲染出来,最终将所有资源整合、渲染,完整展现在我们面前的屏幕上。
网页优化方面有一项措施是减少 HTTP 请求次数,就是把尽量多的 css 和 js 资源合并在一起,目的是尽量减少网页请求静态资源的次数,提高网页加载速度,同时减缓服务器的压力。