目录
- 0 引言
- 1 基本概念
- 2 HTTP
- 2.1 HTTP概况
- 2.1.1 HTTP的主要特点
- 2.1.2 持久HTTP和非持久HTTP
- 2.1.3 HTTP请求报文
- 2.1.4 HTTP响应报文
- 2.2 用户-服务器状态:Cookies
- 2.3 请求-响应模型
- 2.4 Web缓存(代理服务器)
- 🙋♂️ 作者:海码007
- 📜 专栏:计算机四大基础专栏
- 📜 其他章节:网络快速入门系列、计算机网络(一)、计算机网络(二)
- 💥 标题:【网络基础必看】计算机网络 Web与HTTP详解:中科大郑烇老师笔记 (三)
- ❣️ 寄语:人生的意义或许是可以发挥自己全部的潜力,所以加油吧!
- 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正
0 引言
📜闲聊:由于项目紧张,是师兄帮我用QT写好了一个HTTP Server,我学习了其中的原理,维护后续的功能。发现也就两个关键函数,一个函数是获取请求的类型,另一个就是更具不同的请求类型做出对应的响应。例如,解析JSON格式的请求体。
1 基本概念
- Web页:由一些对象组成
- 对象可以使HTML文件、JPEG图像、Java小程序、声音剪辑文件等
- Web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用(链接)
- URL:统一资源定位符(Uniform Resource Locator)
- 通过URL对每个对象进行引用(图像可以使用新标签打开,也就是使用URL打开了一个图像)
- URL格式:协议名,用户名:口令,主机名,路径名,端口等
例子:https://blog.csdn.net/hhw_hhw?spm=1011.2124.3001.5343
解析:https(协议名,还有http,ftp等协议),blog.csdn.net(主机名),/hhw_hhw(路径),spm=1011.2124.3001.5343(参数)
2 HTTP
2.1 HTTP概况
HTTP(Hypertext Transfer Protocol):是一种用于在网络上传输超文本的协议。它是一种客户端-服务器协议,用于从Web服务器请求资源,并将服务器响应的资源传输回客户端。HTTP是基于请求-响应模型的,客户端发送HTTP请求给服务器,服务器根据请求返回相应的资源。
2.1.1 HTTP的主要特点
- 无状态性(Stateless):HTTP是一种无状态协议,这意味着服务器不会保留之前的请求信息。每个请求都被视为独立的事务,服务器仅在每个请求中处理所需的数据。
- 请求方法(Request Methods):HTTP定义了几种请求方法,常见的包括GET、POST、PUT、DELETE等。这些方法指定了客户端希望服务器执行的操作类型。
- 状态码(Status Codes):HTTP使用状态码来表示请求的处理结果。常见的状态码包括200(OK,请求成功)、404(Not Found,请求的资源不存在)、500(Internal Server Error,服务器内部错误)等。
- 报文格式(Message Format):HTTP请求和响应以文本格式进行传输。请求消息包含请求行、请求头和请求体,响应消息包含响应行、响应头和响应体。
- URL(Uniform Resource Locator):HTTP使用URL来标识和定位网络资源。URL由协议类型、主机名、端口号和资源路径组成。(HTTP默认80端口)
- 持久连接(Persistent Connection):HTTP支持持久连接,即在单个TCP连接上可以发送多个HTTP请求和响应,减少了连接建立和关闭的开销。
- 缓存(Caching):HTTP通过使用缓存机制来提高性能和减少网络流量。客户端和服务器可以使用缓存来存储先前请求和响应的副本,以便在将来的请求中重用。
HTTP协议是基于TCP协议实现的
2.1.2 持久HTTP和非持久HTTP
非持久HTTP(HTTP/1.0)
- 最多只有一个对象在TCP连接上发送
- 下载多个对象需要多个TCP连接
- 缺点:①每个对象要2个RTT;②操作系统必须为每个TCP连接分配资源;③但浏览器通常打开并行TCP连接,以获取引用对象。
持久HTTP(HTTP/1.1)
- 多个对象可以在一个(客户端和服务器之间的)TCP连接上传输
- 服务器在发送响应后,仍保持TCP连接
- 客户端在遇到一个引用对象的时候,就可以尽快发送该对象的请求
两种持久HTTP方式:流水线、非流水线
2.1.3 HTTP请求报文
- 两种类型的HTTP报文:请求、响应
HTTP请求报文:
cr cf 表示 回车 换行
- HTTP请求方法类型
2.1.4 HTTP响应报文
- 报文形式:状态行(协议版本、状态码、相应的状态信息)+ 首部行 + 空白行 + 数据(HTML文件)
- HTTP响应状态码
2.2 用户-服务器状态:Cookies
Cookies是一种在Web浏览器和服务器之间传递的小型文本文件。当用户访问一个网站时,网站会将一些数据存储在用户的浏览器中,并在用户下次访问该网站时将这些数据发送回服务器。这些数据通常包含关于用户的偏好、会话信息和其他与网站交互相关的数据。
所以Cookies可以将HTTP从无状态的协议变成有状态的协议
Cookies具有以下特点:
- 持久性:某些cookies可以在用户关闭浏览器后仍然保留,以便在用户下次访问网站时使用。这些被称为持久性cookies。其他cookies只在当前会话期间有效,称为会话cookies。
- 安全性:由于cookies存储在用户的浏览器中,因此它们可以被用户或恶意软件访问和修改。为了增加安全性,可以使用安全cookies,只在通过HTTPS连接时传输,从而加密了数据传输。
- 隐私性:尽管cookies通常用于存储用户偏好和会话信息等有用的数据,但它们也可以被用于跟踪用户的浏览行为。为了保护用户隐私,现代浏览器通常提供了对cookies的控制选项,允许用户选择接受、拒绝或删除cookies。
Cookies在Web应用程序中有多种用途,包括但不限于以下几个方面:
- 会话管理:通过在cookies中存储会话ID或其他标识符,Web应用程序可以跟踪用户的会话状态,例如登录状态、购物车内容等。
- 个性化:Web应用程序可以使用cookies来存储用户的偏好设置,例如语言选择、主题设置等,以提供个性化的用户体验。
- 跟踪和分析:广告商和网站分析工具可以使用cookies来跟踪用户的浏览行为、广告点击等信息,从而提供个性化广告和分析用户行为。
- 跨站点请求伪造(CSRF)防护:通过在cookies中包含CSRF令牌,Web应用程序可以防止CSRF攻击,提高安全性。
需要注意的是,使用cookies也存在一些隐私和安全的风险,因此网站通常需要遵循隐私政策,并尽可能减少对敏感信息的存储和使用。用户也可以通过浏览器设置控制cookies的接受和使用。
2.3 请求-响应模型
HTTP协议是基于请求-响应模型,所以接下来就介绍一下请求-响应模型
HTTP请求-响应模型是HTTP协议的基本工作原理,它描述了客户端和服务器之间的通信过程。根据该模型,HTTP通信包括以下步骤:
- 客户端发起请求:客户端(例如Web浏览器)向服务器发送HTTP请求,请求特定的资源或执行特定的操作。请求由请求行、请求头和请求体组成。请求行包含请求方法(如GET、POST)、URL和HTTP协议版本。请求头包含关于请求的附加信息,如用户代理、Cookie等。请求体包含可选的请求数据,如表单数据或上传的文件。
- 服务器处理请求:服务器接收到客户端的请求后,根据请求的信息进行处理。服务器会解析请求行和请求头,确定请求的目标资源和要执行的操作。
- 服务器生成响应:服务器根据请求的处理结果生成HTTP响应。响应由响应行、响应头和响应体组成。响应行包含状态码(如200、404、500),描述请求处理结果的信息。响应头包含关于响应的附加信息,如内容类型、日期等。响应体包含实际的响应数据,如HTML文档、图像或其他资源。
- 服务器发送响应:服务器将生成的HTTP响应发送回客户端。响应通过网络传输到客户端的HTTP接收器。
- 客户端接收响应:客户端接收到服务器发送的HTTP响应。客户端的HTTP接收器解析响应,提取响应行、响应头和响应体中的数据。
- 客户端处理响应:客户端根据响应的内容进行处理。例如,Web浏览器会根据响应的内容渲染网页,显示在用户界面上。
HTTP请求-响应模型的工作方式使得客户端和服务器可以通过HTTP协议进行可靠的通信。客户端发送请求并等待服务器的响应,服务器处理请求并生成响应,然后将响应发送回客户端。这种模型的灵活性使得HTTP在Web开发和网络通信中得到广泛应用。
2.4 Web缓存(代理服务器)
- Web缓存是一种用于存储和提供Web页面、图像、脚本和其他网络资源的临时存储机制。它位于Web浏览器和服务器之间,可以减少网络传输延迟、降低带宽消耗,并提高用户访问网页的速度和性能。
- 当用户首次访问一个网页时,浏览器会向服务器发送请求,并将服务器返回的响应保存在本地的缓存中。下次用户再次访问相同的网页时,浏览器会首先检查本地缓存,如果有匹配的缓存副本并且尚未过期,浏览器将直接从缓存中加载资源,而不必再次向服务器发起请求。这样可以减少网络传输的次数,提高页面加载速度。
- Web缓存不仅仅是存储在本地,还存储在服务器上,因为有时候访问一个资源的之后并不是直接就访问,中间可能需要经过其他的服务器(代理服务器)。
Web缓存带来了以下好处:
- 提高用户体验:通过减少网络传输和页面加载时间,用户可以更快地获取所需的网页内容,提高了用户的访问体验。
- 减轻服务器负载:由于缓存服务器可以直接提供资源,减少了对原始服务器的请求,从而降低了服务器的负载。
- 节省带宽消耗:由于缓存可以重用已经下载的资源,可以节省网络带宽的使用,尤其对于重复访问相同资源的用户来说效果更为显著。
- 降低网络延迟:由于缓存通常位于用户与服务器之间的较近位置,可以减少网络传输的距离和延迟。