文章目录
HTTP协议简介
简介:HTTP协议工作在应用层,基于TCP/IP协议传输数据。HTTP 的基本工作原理是客户端通过使用网页浏览器,发起一个HTTP请求到服务器上指定端口(默认端口为80),服务器接收到请求后,返回相应的资源。这些资源可以是网页、图像、音频文件、视频等。
HTTP和HTTPS协议的区别
- HTTP(超文本传输协议,Hypertext Transfer Protocol):是一种用于从网络传输超文本到本地浏览器的传输协议。HTTP工作在TCP/IP模型之上,通常使用端口80。由于HTTP是不安全的,传输的数据未经加密,可能会被窃听或篡改。适用于不需要传输敏感信息的网站,如新闻网站、博客等。
- HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure):是HTTP的安全版本,它在HTTP下增加了SSL/TLS协议,提供了数据加密、完整性校验和身份验证。HTTPS通常使用端口443,适用于需要传输敏感信息的网站,如网上银行、在线购物、电子邮件等。
HTTP 工作原理
- 客户端发起请求:用户通过客户端(如浏览器)输入 URL,客户端向服务器发起一个 HTTP 请求。
- 服务器处理请求:服务器接收到请求后,根据请求的类型(如GET、POST等)和请求的资源,进行相应的处理。
- 服务器返回响应:服务器将处理结果包装成HTTP响应消息,发送回客户端。
- 客户端渲染页面:客户端接收到响应后,根据响应内容(如HTML、图片等)渲染页面,展示给用户。
HTTPS工作原理
HTTPS在传输数据前会建立一个加密通道,主要过程如下:
- 客户端发起请求:客户端向服务器发起HTTPS请求,服务器返回数字证书。
- 验证证书:客户端验证服务器证书的有效性。
- 密钥交换:客户端生成一个随机的对称密钥,并使用服务器的公钥加密后发送给服务器。
- 加密通信:服务器使用私钥解密出对称密钥,之后双方使用这个对称密钥进行加密通信。
HTTP协议特点
无连接性
客户端和服务器在每个请求/响应对后都会关闭连接。
优点:
- 节省资源:无连接方式可以减少服务器和客户端的资源占用,因为每个请求都是独立的,不需要维持长时间的连接。
缺点:
- 性能低下:每次请求都要重新建立和关闭连接,增加了开销和延迟。
- 效率低下:频繁的TCP连接建立和断开会消耗更多的时间和资源。
优化无连接特性
-
为了克服HTTP/1.0无连接特性的缺点,HTTP/1.1引入了持久连接。连接建立后,等待一段时间,等待客户端是否有后续操作,没有则断开连接。通过复用连接,减少了连接建立和断开的开销和延迟。允许在同一个连接上发送多个请求,显著提高了性能。
-
HTTP/2进一步优化了连接管理,增加多路复用,在一个TCP连接上同时发送多个请求和响应,解决了HTTP/1.1中的队头阻塞问题。
-
HTTP/3基于QUIC协议,进一步提升了性能,QUIC协议基于UDP而不是TCP,减少了连接建立的延迟。
无状态性
HTTP的无状态性是指在同一个客户端和服务器之间进行的每个请求都是独立的,服务器不会自动保存前一个请求的信息。这意味着每个HTTP请求都必须包含足够的信息,使得服务器可以理解并处理这个请求,而无需参考之前的请求。
优点:
- 每个请求都独立存在,服务器不会保存上一个请求的状态。服务器不需要了解请求的上下文。无状态性使得负载均衡变得更容易,可以将请求分配给任意服务器处理,而无需考虑会话状态。
缺点:
-
请求冗余:每个请求都必须携带所有必要的信息,可能导致请求变得冗长和冗余。
-
客户端负担:客户端必须在每次请求中包含所有必要的状态信息,这增加了客户端的负担。
如何优化无状态性
尽管HTTP是无状态的,但很多应用需要保持状态,比如用户登录后的会话。为了解决这个问题,通常采用以下几种方法:
Cookie:
- 服务器通过在响应中设置Set-Cookie头,将状态信息保存到客户端。
- 客户端在后续请求中通过Cookie头发送这些信息回服务器。
- 例如,服务器可以在用户登录后设置一个会话Cookie,客户端在每次请求时携带这个Cookie,服务器可以通过Cookie识别用户。
Token:
- 使用令牌(Token)来管理状态,常用于API的身份验证。
- 令牌可以是JWT(JSON Web Token),它包含了身份验证信息,可以在客户端和服务器之间传递。
HTTP请求方法
- GET:用于获取资源的表示。例如,当你在浏览器中输入 URL 地址时,浏览器会发送一个 GET 请求来获取该 URL 对应的网页。
- HEAD:获取资源的元数据,与GET类似,但不返回资源本身。
- POST:用于向服务器提交数据,通常用于提交表单或上传文件。例如,在提交注册表单时,浏览器通常会发送一个 POST 请求,将用户提供的信息发送到服务器进行处理。
- PUT:用于更新资源的全部内容。
- PATCH:用于部分更新资源。
- DELETE:用于请求服务器删除指定的资源。
- OPTIONS:获取服务器支持的通信选项。
- TRACE:用于诊断,回显服务器收到的请求。
- CONNECT:将请求连接转换为透明的TCP/IP隧道。
HTTP状态码
类别 | 原因解释 | |
---|---|---|
1** | Informational(信息响应) | 服务器收到请求正在处理 |
2** | Success(成功) | 请求被服务器成功接收并完成处理 |
3** | Redirection(重定向) | 需要进行附加操作以完成请求 |
4** | Client Error(客户端错误) | 服务器无法处理请求 |
5** | Server Error(服务器错误) | 服务器处理出错 |
常见状态码使用场景
- 200 (OK):请求成功,服务器返回请求的数据。
- 301(Moved Permanently):请求的资源已被永久移动到新位置。
- 404 (Not Found):请求的资源不存在。
- 500 (Internal Server Error):服务器内部错误,无法完成请求。
用例:在浏览器地址栏键入URL,按下回车之后会经历以下流程
- 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址
- 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器
- 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器
- 释放 TCP连接
- 浏览器渲染 html 文本显示
《DNS解析详解》
标签:协议,HTTP,请求,详解,服务器,浏览器,连接,客户端 From: https://blog.csdn.net/qq_47012987/article/details/139858367