一. HTTP/HTTPS简介
1.1 HTTP
HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上,通常使用端口 80。
HTTP的工作过程:
- 客户端发起请求
- 服务器处理请求
- 服务端返回响应
- 客户端渲染页面
HTTP三点注意事项:
- HTTP是无连接的, 每次只处理一次请求, 即服务器处理完客户端的连接, 并接收客户端的回应后, 即断开连接, 这种方式可以节省传输时间.
- HTTP是媒体独立的, 即只要服务端和客户端知道需要传输的数据, 任何类型的数据都可以通过HTTP传输, 客户端和服务端指定合适的MIME-type.
- HTTP是无状态的, 无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。
1.2 HTTPS
HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure)是 HTTP 的安全版本 ,它在 HTTP 下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。HTTPS 通常使用端口 443。
二. HTTP/HTTPS请求
使用 fiddler 来捕获B站的请求
可以发现, HTTP请求由四部分构成:
- 首行
- 请求头
- 空行
- 主体
接下来详细的介绍一下各个部分.
2.1 首行
首行由 请求方式 + URL + HTTP版本号 组成
2.2 请求头
Host: 服务器域名.
Connection: 连接管理策略, keep-alive表示希望在完成当前请求后保持连接. 以便复用同一个TCP连接发送数据
Content-Length: 请求体的长度, 单位是字节.
sec-zh-ua-platform:客户端的操作系统平台
User-Agent:客户端的浏览器和操作系统的信息
Accept: 客户端能够处理的内容类型, 'application/json'表示客户端希望服务器返回JSON格式的数据.
sec-ch-ua: 客户端浏览器的用户代理品牌和版本信息
Content-Type: 请求体的媒体类型, 'application/json'表示请求体是JSON格式的数据.
sec-ch-ua-mobile: 客户端是否为移动设备. '?0'表示不是移动设备.
Origin: 请求的源, 即发起请求的页面的URL.
Sec-Fetch-Site:请求的站点上下文, 'same-site'表示请求来自同一站点
Sec-Fetch-Mode: 请求的模式, cors表示跨源资源共享请求
Sec-Fetch-Dest:请求的目的地, empty表示没有指定目的地.
Referer: 从哪个URL跳转来的
Accept-Encoding: 客户端能够处理的内容编码.这里列出了客户端支持的压缩模式, gzip br...
Accept-Language: 客户端能够理解的语言
Cookie: 包含客户端存储的cookie信息, 用于会话管理, 用户跟踪或个性化设计.
2.3 空行
请求头和请求体之间的空行. 标志着请求头的结束.
2.4 请求体
请求体包含要发送给服务器的数据.
三. HTTP/HTTPS请求方法
3.1 请求方法
- GET 从服务器获取资源. 例如: 从服务器获取图片, 视频等.
- POST 向服务器发送数据来创建新资源. 例如: 表单提交, 上传文件. 发送数据包含在请求体中.
- PUT 向服务器发送数据来更新现有资源. 如果资源不存在,则创建新的资源。与 POST 不同,PUT 通常是幂等的,即多次执行相同的 PUT 请求不会产生不同的结果。
- DELETE 删除服务器中的资源. 请求中包含要删除的资源标识符.
- PATCH 对资源进行部分修改. 与PUT类似.
- HEAD 类似于GET但服务器只返回响应的头部,不返回实际数据。用于检查资源的元数据(例如,检查资源是否存在,查看响应的头部信息)。
- OPTIONS 返回服务器支持的请求方法. 用于检查服务器支持哪些请求方法,通常用于跨域资源共享(CORS)的预检请求。
- TRACE 回显服务器收到的请求, 主要用于诊断. 客户端可以查看请求在服务器中的处理路径.
- CONNECT 建立一个到服务器的隧道,通常用于 HTTPS 连接。客户端可以通过该隧道发送加密的数据。
3.2 各个HTTP版本
各个HTTP版本定义的请求方法.
- HTTP/1.0
- GET
- POST
- HEAD
- HTTP/1.1
- GET
- POST
- HEAD
- PUT
- DELETE
- OPTIONS
- TRACE
- CONNECT
- HTTP/2
- HTTP/2 基本上沿用了 HTTP/1.1 的方法,但对协议进行了优化,提高了传输效率和速度。HTTP/2 也引入了新的特性,如多路复用、头部压缩和服务器推送等。
- HTTP/3
- HTTP/3 基于 QUIC 协议实现,继续使用 HTTP/2 的方法。HTTP/3 主要改进了传输层,使用 UDP 代替 TCP 以提高传输速度和可靠性。
3.3 GET和POST的区别(面试常考)
-
功能上: GET一般用于从服务器上获取资源, POST则用于更新服务器中的资源.:
-
安全性: GET是不安全的, 因为GET请求提交的数据(参数)将明文出现在URL上(请求头), 可能会泄露隐私; POST是安全的, 因为POST请求提交的数据(参数)被包装在请求体中.
-
数据量: GET传输的数据量少, 因为受URL长度的限制;POST传输的数据量大, 因为传输的数据被包装在请求体中. 因此, 上传文件时使用POST.
四. HTTP/HTTPS响应
捕获 B站 的响应.
响应也由四部分组成:
- 首行
- 响应头
- 空行
- 响应体
详细介绍.
4.1 首行
响应的首行由三部分组成.
HTTP版本号 + 状态码 + 状态码的描述性文本.
4.2 响应头
这次重点认识一些.
Date: 响应生成的日期和时间.
Content-Type: 响应体的媒体类型.
Content-Length: 响应体的长度, 单位为字节.
Connection: 连接管理策略. keep-alive 表示服务器希望保持连接.
Server: 指定服务器软件的信息.
4.3 空行
响应头和响应体之间的空行. 标志着响应头的结束.
4.4 响应体
{"code":0} 是一个JSON格式的响应体,通常用于API(应用程序编程接口)调用的结果。在这种情况下,它表示请求已成功处理,并且服务器返回了一个状态码 0,这通常意味着没有错误发生,请求执行成功。
五. 状态码
状态码表示客户端请求的返回结果.
5.1 状态码的分类
状态 | 描述 |
---|---|
1XX | 指示信息-表示请求已经被接受, 正在处理 |
2XX | 成功-表示请求已被成功接收, 理解, 接受 |
3XX | 重定向-要完成请求必须进行更进一步的操作 |
4XX | 客户端错误-请求有语法错误或请求无法实现 |
5XX | 服务器端错误-服务器未能实现合法的请求 |
5.2 常见状态码
常用状态码:
200: 请求被正常处理
204: 请求被受理但没有资源可以返回
301: 永久性重定向
302: 临时重定向
304: 已缓存
400: 请求报文语法有误,服务器无法识别
403: 请求的对应资源禁止被访问
404: 服务器无法找到对应资源
500: 服务器内部错误
503: 服务器正忙
以上这些是HTTP/HTTPS的基础知识.