HTTP
HTTP状态码
HTTP 状态码用于表示服务器对请求的处理结果,可以分为 5 种:
- 1xx 服务器收到请求,需要进一步操作,例如 100 Continue。
- 2xx 请求成功处理,例如 200 OK。
- 3xx 重定向:需要进一步操作以完成请求;例如 304 Not Modified 表示资源未修改,客户端可以使用缓存。
- 4xx 客户端错误:请求有问题,例如 404 Not Found 表示资源不存在。
- 5xx 服务器错误,例如500 Internal Server Error 表示服务器内部错误。
GET和POST的区别
GET 请求主要用于获取数据,参数附加在 URL 中,存在长度限制,且容易被浏览器缓存,有安全风险,请求是幂等的,多次请求不会改变服务器状态
POST 请求用于提交数据,参数放在请求体中,适合提交大量或敏感的数据。 请求不是幂等的,可能对服务器数据有影响。
post请求可以用于查询么?为啥不全用post呢
RESTful API 设计的核心是「资源 + 动作」,HTTP 方法对应动作
如果全用 POST 做查询,接口语义会完全丢失 —— 比如 /api/user 用 POST 既可能是「查用户」,也可能是「新增用户」,开发者必须看文档 / 代码才能区分,维护成本极高
查询类请求通常是高频且结果相对稳定的,GET 请求的缓存机制能大幅提升性能:浏览器第一次查完,会缓存结果,第二次直接从本地取,不用发请求;CDN / 网关层也能缓存 GET 请求结果,减轻后端服务器压力。
而 POST 请求默认不会被缓存,即使手动配置缓存规则,也远不如 GET 天然适配,全用 POST 会浪费缓存带来的性能优化。
HTTP 请求的过程与原理
- 在浏览器输入 URL 后,浏览器首先会通过 DNS 解析获取到服务器的 IP 地址,然后与服务器建立 TCP 连接。
- TCP 连接建立后,浏览器会向服务器发送 HTTP 请求。
- 服务器收到请求后,会根据请求的信息处理请求。
- 处理完请求后,服务器会返回一个 HTTP 响应给浏览器。
- 浏览器收到响应后,会根据响应的信息渲染页面。然后,浏览器和服务器断开 TCP 连接。
客户端发送一个请求到服务器,服务器处理请求并返回一个响应。这个过程是同步的,也就是说,客户端在发送请求后必须等待服务器的响应。在等待响应的过程中,客户端不会发送其他请求
HTTP 与 HTTPS 有哪些区别
HTTPS 是 HTTP 的增强版,在 HTTP 的基础上加入了 SSL/TLS 协议,确保数据在传输过程中是加密的
HTTP 是明文传输的,存在数据窃听、数据篡改和身份伪造等问题。而 HTTPS 通过引入 SSL/TLS,解决了这些问题。
SSL/TLS 在加密过程中涉及到了两种类型的加密方法:
- 非对称加密:服务器向客户端发送公钥,然后客户端用公钥加密自己的随机密钥,也就是会话密钥,发送给服务器,服务器用私钥解密,得到会话密钥
- 对称加密:双方用会话密钥加密通信内容
客户端会通过数字证书来验证服务器的身份,数字证书由 CA 签发,包含了服务器的公钥、证书的颁发机构、证书的有效期等
HTTP的报文结构
HTTP 的报文结构分为:请求报文和响应报文。两者在结构上很相似,都包含了起始行、头部和消息正文
HTTP 响应报文结构
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
<html>
<body>沉默王二很天真</body>
</html>①、状态行
包括 HTTP 协议的版本、状态码(如 200、404)和状态消息(如 OK、NotFound)。例如:HTTP/1.0 200 OK。
②、响应头部
包含响应的附加信息,如服务器类型、内容类型、内容长度等。也是键值对,例如:
Content-Type: text/plain,表示响应的内容类型Content-Length: 137582,表示响应的内容长度Expires: Thu, 05 Dec 1997 16:00:00 GMT,表示资源的过期时间Last-Modified: Wed, 5 August 1996 15:55:28 GMT,表示资源的最后修改时间Server: Apache 0.84,表示服务器类型
③、空行
表示响应头部结束。
④、消息正文(可选)
响应的具体内容,如 HTML 页面。不是所有的响应都有消息正文,如 204 No Content 状态码的响应。