原文:http://www.steves-internet-guide.com/http-basics/
了解 HTTP 基础知识
HTTP 超文本传输协议,用于 Web 传输数据。
它是 Web 开发的关键协议,并且由于广泛使用,还用于在 IOT 应用程序中传输数据和命令。
http协议的第一个版本只有一个方法,即 GET,它将从服务器请求页面。
服务器的响应始终是 HTML 页面。- Wiki
想要了解 HTTP 协议开始时的简单程度,可以查看只有 1 页的原始规范。
从最初的0.9 版本开始,已经有多个 HTTP版本。
当前版本为 1.1,最后一次修订是在 2014 年。有关详细信息,请参阅Wiki。
工作机理
与大多数 Internet 协议http一样,它是使用客户端服务器通信模型的基于命令和响应 文本的协议。
客户端发出请求,服务器响应。
HTTP 协议也是一种无状态协议,这意味着服务器不需要存储会话信息,并且每个请求彼此独立。- 请参阅此wiki
这表示:
- 所有请求都来自客户端(您的浏览器)
- 服务器响应请求。
- 请求(命令)和响应是可读的文本。
- 请求是相互独立的,服务器不需要跟踪请求。
请求和响应结构
请求和响应消息结构相同,如下图所示:
请求包括:
命令或请求+可选标头+可选正文内容。
响应包括:
状态码+可选标题+可选正文内容。
一个简单的CRLF(回车和换行)组合用于分隔部分,单个空行 ( CRLF ) 表示标题的结尾。
如果请求或响应包含消息正文,则在标头中指明。
请求中是否存在消息正文由Content-Length或Transfer-Encoding标头字段表示。请求消息框架独立于方法语义,即使该方法没有定义消息体的任何用途。– RFC 7230第 3.3 节。
注意:消息正文后面没有 CRLF 请参阅RFC 7230第 3.5 节**
HTTP 请求
之前看到了一般的请求响应格式,下面将更详细地介绍请求消息。
起跑线是强制性的,其结构如下:
方法+资源路径+协议版本
例如,如果我们尝试访问 www.testsite5.com 上的网页 testpage.htm
请求的起始行是: GET /test.htm HTTP/1.1
- GET是方法
- /testpage.htm是资源的相对路径。
- HTTP/1.1是我们使用的协议版本
注意:
- 相对路径不包括域名。
- Web 浏览器使用我们输入的 URL 来创建资源的相对 URI。
注意: URL(统一资源定位器)用于网页。它是URI(统一资源指示符)的一个示例。
http包可以用解析工具如wireshark抓取或者chrome开发者工具 netrwork分析中可以查看
HTTP 与 URL
大多数人都熟悉在网络浏览器中输入网址。通常看起来像这样。
url 还可以包含通常被浏览器隐藏的端口,但您可以手动包含它,如下所示:
这告诉 Web 浏览器要定位的资源的地址以及用于检索该资源的协议(http)。
http是将资源(网页、图像、视频等)从服务器传输到客户端的传输协议。
HTTP响应和响应代码
每个请求都有一个响应。响应包括
- 状态码和说明
- 1 个或多个可选标题
- 可选的消息体(消息体可能有多行二进制数据流)
响应状态代码分为 5 组,每组有一个含义和一个三位数代码。
- 1xx – 信息
- 2xx – 成功
- 3xx - 多项选择
- 4xx – 客户端错误
- 5xx - 服务器错误
例如,成功的页面请求将返回200响应代码和不成功的400响应代码。
可以在此处找到完整列表及其含义
请求响应示例
当我们访问一个简单的网页(testpage.htm)时,我们将检查他的请求和响应
这是我在浏览器地址栏中输入的内容:
这是浏览器显示的响应:
这是幕后发生的http请求响应的屏幕截图。
请注意,请求标头是由浏览器自动插入的,响应标头也是由 Web 服务器插入的。
请求中没有正文内容。回复中的正文内容是一个网页,并显示在浏览器中,而不是由实时标题工具显示。
请求类型
到目前为止,我们还没有提到请求类型,但我们已经在示例中看到了 GET 请求类型。
GET 请求类型或方法用于从 Web 服务器请求资源。
GET 是最常用的请求类型,也是原始 HTTP 规范中唯一的请求类型。
请求类型、方法
HTTP 协议现在支持 8 种请求类型,在文档中也称为方法或动词,它们是:
- GET - 从服务器请求资源
- POST – 向服务器提交资源(例如文件上传)
- PUT -As POST 但替换资源
- DELETE - 从服务器中删除资源
- HEAD - 作为 GET 但只返回标题而不是内容
- OPTIONS - 获取资源的选项
- PATCH - 对资源应用修改
- TRACE - 执行消息环回
在当今的 Internet 上,GET(获取网页)和POST(提交 Web 表单)方法是最常用的方法。
其他方法用于处理 Web 和 IOT API,特别是 put、delete 和 head。