1.HTTP(超文本传输协议,Hypertext Transfer Protocol)
是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上,通常使用端口 80。
2.HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure)
是 HTTP 的安全版本,它在 HTTP 下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。HTTPS 通常使用端口 443。
3.HTTP 工作原理
HTTP 协议工作于客户端-服务端架构上。(应用层)
HTTP 工作过程通常如下:
- 客户端发起请求:用户通过客户端(如浏览器)输入 URL,客户端向服务器发起一个 HTTP 请求。
- 服务器处理请求:服务器接收到请求后,根据请求的类型(如GET、POST等)和请求的资源,进行相应的处理。
- 服务器返回响应:服务器将处理结果包装成HTTP响应消息,发送回客户端。
- 客户端渲染页面:客户端接收到响应后,根据响应内容(如HTML、图片等)渲染页面,展示给用户。
Web 服务器有:Nginx 服务器,Apache 服务器,IIS 服务器(Internet Information Services)等。
HTTP 默认端口号为 80,但是你也可以改为 8080 或者其他端口。
4.HTTP 三点注意事项:
-
HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。
-
HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的 MIME-type 内容类型。
-
HTTP 是无状态:HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快
5.工作流程
一次HTTP操作称为一个事务,其工作过程可分为四步:
1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是
MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,
后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程 是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
HTTP是基于传输层的TCP协议,而TCP是一个端到端的面向连接的协议。所谓的端到端可以理解为进程到进程之间的通 信。所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”。
6.http报文组成
HTTP请求报文由3部分组成(请求行+请求头+请求体):
下面是一个实际的请求报文1:
其中,①,②和③属于请求行;④属于请求头;⑤属于报文体
实例2:
GET /abdr?data=%7B%2qBERtcAmkB%2B%2FXvI786gGpZesvDAMZmnEfuo6RGD1yES4jUHe3ZkfhUujUy%22key_id%22%%3A2%7D&_=0.8572451124963135 HTTP/1.1
Host: miao.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0
Accept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br, zstd
Referer: https://zhidao.baidu.com/question/723511025590340285.html
Connection: keep-alive
Cookie: BAIDUID=DC71F2A53F29AE6065A8B4ED0FA870F1:FG=1;
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-site
Priority: u=5, i
分析:
1. 请求行
-
方法:
GET
-
路径:
/abdr?data=%7B%aPP22key_id%22%3A%225de04enc%22%3A2%7D&_=0.8572451124963135
-
HTTP版本:
HTTP/1.1
-
路径分析:
-
data
参数是一个经过URL编码的JSON字符串,解码后可能包含一些加密或编码的数据。 -
key_id
和enc
参数可能用于标识加密密钥或加密方式。 -
_
参数通常用于防止缓存,值为一个随机数。
-
2. 请求头字段
-
Host:
miao.baidu.com
-
指定请求的目标服务器。
-
-
User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0
-
表示客户端使用的浏览器和操作系统信息。这里使用的是Firefox浏览器,运行在Windows 10系统上。
-
-
Accept:
image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5
-
表示客户端可以接受的MIME类型。优先接受
image/avif
、image/webp
、image/png
、image/svg+xml
,其次是其他图片类型,最后是任意类型。
-
-
Accept-Language:
zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
-
表示客户端优先接受简体中文(
zh-CN
),其次是其他中文变体(如繁体中文),最后是英文。
-
-
Accept-Encoding:
gzip, deflate, br, zstd
-
表示客户端支持的压缩编码方式,服务器可以选择其中一种来压缩响应数据。
-
-
Referer:
https://zhidao.baidu.com/question/723511025590340285.html
-
表示请求是从哪个页面发起的。这里是从百度知道的一个问题页面发起的请求。
-
-
Connection:
keep-alive
-
表示客户端希望保持与服务器的连接,以便后续请求可以复用该连接。
-
-
Cookie:
-
包含了一系列的Cookie信息,用于标识用户会话和其他状态信息。例如:
-
BAIDUID
、BIDUPSID
、PSTM
等是百度用于标识用户的Cookie。 -
BDORZ
是百度用于防止CSRF攻击的Cookie。 -
H_PS_PSSID
是百度用于标识用户会话的Cookie。
-
-
-
Sec-Fetch-Dest:
image
-
表示请求的目标资源类型是图片。
-
-
Sec-Fetch-Mode:
no-cors
-
表示请求的模式是“no-cors”,即不跨域资源共享(CORS)请求。
-
-
Sec-Fetch-Site:
same-site
-
表示请求的目标站点与当前站点是同一个站点。
-
-
Priority:
u=5, i
-
表示请求的优先级,
u=5
表示用户触发的请求,i
表示请求的资源类型是图片。
-
7.请求方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 从服务器获取资源。用于请求数据而不对数据进行更改。例如,从服务器获取网页、图片等。 |
2 | POST | 向服务器发送数据以创建新资源。常用于提交表单数据或上传文件。发送的数据包含在请求体中。 |
3 | PUT | 向服务器发送数据以更新现有资源。如果资源不存在,则创建新的资源。与 POST 不同,PUT 通常是幂等的,即多次执行相同的 PUT 请求不会产生不同的结果。 |
4 | DELETE | 从服务器删除指定的资源。请求中包含要删除的资源标识符。 |
5 | PATCH | 对资源进行部分修改。与 PUT 类似,但 PATCH 只更改部分数据而不是替换整个资源。 |
6 | HEAD | 类似于 GET,但服务器只返回响应的头部,不返回实际数据。用于检查资源的元数据(例如,检查资源是否存在,查看响应的头部信息)。 |
7 | OPTIONS | 返回服务器支持的 HTTP 方法。用于检查服务器支持哪些请求方法,通常用于跨域资源共享(CORS)的预检请求。 |
8 | TRACE | 回显服务器收到的请求,主要用于诊断。客户端可以查看请求在服务器中的处理路径。 |
9 | CONNECT | 建立一个到服务器的隧道,通常用于 HTTPS 连接。客户端可以通过该隧道发送加密的数据。 |
8.HTTP 响应信息
客户端向服务器发送一个请求,服务器以一个状态行作为响应,响应的内容包括:消息协议的版本、成功或者错误编码、服务器信息、实体元信息以及必要的实体内容。根据响应类别的类别,服务器响应里可以含实体内容,但不是所有 的响应都有实体内容。
HTTP的响应报文也由三部分组成(响应行+响应头+响应体):
以下是一个实际的HTTP响应报文:
①报文协议及版本;
②状态码及状态描述;
(响应行)
③响应报文头,也是由多个属性组成;(响应头)
④响应报文体(响应正文)
常见状态码
200 | OK | 请求成功。一般用于GET与POST请求 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
9.常见相应头
以下是一些常见的 HTTP 响应头信息:
响应头信息(英文) | 响应头信息(中文) | 描述 |
---|---|---|
Date | 日期 | 响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT |
Server | 服务器 | 服务器软件的名称和版本。例如:Apache/2.4.1 (Unix) |
Content-Type | 内容类型 | 响应体的媒体类型(MIME类型),如text/html; charset=UTF-8 , application/json 等。 |
Content-Length | 内容长度 | 响应体的大小,单位是字节。例如:3145 |
Content-Encoding | 内容编码 | 响应体的压缩编码,如 gzip , deflate 等。 |
Content-Language | 内容语言 | 响应体的语言。例如:zh-CN |
Content-Location | 内容位置 | 响应体的 URI。例如:/index.html |
Content-Range | 内容范围 | 响应体的字节范围,用于分块传输。例如:bytes 0-999/8000 |
Cache-Control | 缓存控制 | 控制响应的缓存行为, 如 no-cache 表示必须重新请求。 |
Connection | 连接 | 管理连接的选项,如keep-alive 或close ,keep-alive 表示连接不会在传输后关闭。。 |
Set-Cookie | 设置 Cookie | 设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure |
Expires | 过期时间 | 响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT |
Last-Modified | 最后修改时间 | 资源最后被修改的日期和时间。例如:Wed, 18 Apr 2024 11:00:00 GMT |
ETag | 实体标签 | 资源的特定版本的标识符。例如:"33a64df551425fcc55e6" |
Location | 位置 | 用于重定向的 URI。例如:/newresource |
Pragma | 实现特定的指令 | 包含实现特定的指令,如 no-cache 。 |
WWW-Authenticate | 认证信息 | 认证信息,通常用于HTTP认证。例如:Basic realm="Access to the site" |
Accept-Ranges | 接受范围 | 指定可接受的请求范围类型。例如:bytes |
Age | 经过时间 | 响应生成后经过的秒数,从原始服务器生成到代理服务器。例如:24 |
Allow | 允许方法 | 列出资源允许的 HTTP 方法 。例如:GET, POST,HEAD等 |
Vary | 变化 | 告诉下游代理如何使用响应头信息来确定响应是否可以从缓存中获取。例如:Accept |
Strict-Transport-Security | 严格传输安全 | 指示浏览器仅通过 HTTPS 与服务器通信。例如:max-age=31536000; includeSubDomains |
X-Frame-Options | 框架选项 | 控制页面是否允许在框架中显示,防止点击劫持攻击。例如:SAMEORIGIN |
X-Content-Type-Options | 内容类型选项 | 指示浏览器不要尝试猜测资源的 MIME 类型。例如:nosniff |
X-XSS-Protection | XSS保护 | 控制浏览器的 XSS 过滤和阻断。例如:1; mode=block |
Public-Key-Pins | 公钥固定 | HTTP 头信息,用于HTTP公共密钥固定(HPKP),一种安全机制,用于防止中间人攻击。例如:pin-sha256="base64+primarykey"; pin-sha256="base64+backupkey"; max-age=expireTime |