HTTP深度解析
HTTP基础
1. HTTP 协议是什么?
HTTP(Hypertext Transfer Protocol )是 超文本传输协议,它是浏览器和服务器之间进行通信的规则。简单来说,当你在浏览器输入网址,浏览器就会通过 HTTP 协议向服务器发送请求,服务器根据请求返回响应,浏览器再根据响应的内容显示页面。
2. HTTP 请求的基本原理:
- 客户端发起请求: 当你访问一个网站时,浏览器作为客户端发出请求。这个请求通常包含了你希望从服务器获取的资源(例如网页、图片、视频等)。
- 服务器处理请求: 服务器接收到请求后,处理请求并返回响应内容。
- 客户端接收响应: 浏览器接收到服务器的响应后,显示网页或者处理数据。
3. HTTP 请求结构:
HTTP 请求由三个主要部分组成:
-
请求行(Request Line):
- 方法(Method): 请求类型,常见的有
GET(请求数据)、POST(提交数据)、PUT(更新数据)、DELETE(删除数据)等。 - 请求 URI(Request URI): 请求的资源路径。例如,
/index.html或者/api/users。 - HTTP 版本(HTTP Version): 例如
HTTP/1.1或HTTP/2。
例如:
GET /index.html HTTP/1.1 - 方法(Method): 请求类型,常见的有
-
请求头(Request Headers):
请求头包含了请求的附加信息,比如浏览器类型、语言、缓存设置等。这些信息帮助服务器处理请求。
常见的请求头字段有:
User-Agent:浏览器类型。Accept:浏览器能接受的响应类型(如text/html、application/json)。Host:目标主机名。Authorization:用于身份验证的凭证。
例如:
User-Agent: Mozilla/5.0 Accept: text/html, application/xhtml+xml, application/xml Host: www.example.com -
请求体(Request Body):
请求体包含了要发送给服务器的数据(只有在 POST 或 PUT 请求时才有请求体),比如提交的表单数据、JSON 数据等。
例如:
username=johndoe&password=1234
4. HTTP 响应的基本原理:
- 服务器返回响应: 服务器根据客户端的请求处理后返回一个响应,告诉客户端请求是否成功,并提供所请求的数据。
5. HTTP 响应结构:
HTTP 响应也由三个主要部分组成:
-
响应行(Response Line):
- HTTP 版本(HTTP Version): 例如
HTTP/1.1。 - 状态码(Status Code): 服务器返回的响应状态,告诉客户端请求的结果。
- 状态描述(Status Description): 状态码的描述。例如
200 OK表示请求成功,404 Not Found表示请求的资源不存在。
例如:
HTTP/1.1 200 OK - HTTP 版本(HTTP Version): 例如
-
响应头(Response Headers):
响应头包含了关于响应的额外信息,如服务器类型、返回内容的类型(HTML、JSON 等)以及缓存控制等。
常见的响应头字段有:
Content-Type:响应内容的类型(如text/html、application/json)。Content-Length:响应内容的长度(字节数)。Cache-Control:缓存策略。
例如:
Content-Type: text/html Content-Length: 1234 Cache-Control: no-cache -
响应体(Response Body):
响应体包含了真正的数据内容,浏览器可以根据内容类型进行展示或处理。比如:
- HTML 页面内容
- JSON 数据
- 图片文件的二进制数据
例如:
<html> <head><title>Welcome</title></head> <body><h1>Welcome to My Website</h1></body> </html>
6. HTTP 状态码常见分类:
状态码是 HTTP 响应的重要组成部分,常见的分类和含义如下:
- 1xx:信息性状态码 --- 请求已接收,继续处理(例如 100 Continue)。
- 2xx:成功状态码 --- 请求成功处理并返回数据(例如 200 OK)。
- 3xx:重定向状态码 --- 需要进一步操作才能完成请求(例如 301 Moved Permanently)。
- 4xx:客户端错误状态码 --- 请求有问题(例如 404 Not Found,400 Bad Request)。
- 5xx:服务器错误状态码 --- 服务器处理请求时出现错误(例如 500 Internal Server Error)。
7. HTTP 方法简述:
- GET: 请求数据(没有请求体),常用于获取页面或资源。
- POST: 提交数据,通常用于提交表单或上传文件。
- PUT: 更新现有资源的数据。
- DELETE: 删除指定的资源。
- HEAD: 获取响应头部信息,不返回响应体。
总结:
HTTP 协议是一种客户端与服务器之间通信的规则。通过请求和响应的方式,浏览器和服务器进行信息交换。请求包含了方法、资源路径、请求头和请求体,响应则包括了状态码、响应头和响应体。理解这些结构可以帮助我们更好地理解网页加载的过程,调试网络请求时也能更加高效。
TCP与UDP区别
TCP (Transmission Control Protocol ,传输控制协议)和 UDP (User Datagram Protocol,用户数据报协议)是计算机网络中常用的传输层协议。它们在数据传输时有不同的特点和应用场景。下面是它们的基本概念、区别以及应用场景的详细讲解。
TCP(传输控制协议)
基本概念:
- 面向连接:在传输数据之前,TCP 会建立连接,确保数据的可靠传输。它需要在客户端和服务器之间建立一个"虚拟的连接"。
- 可靠传输:TCP 确保数据能够完整、按顺序地送达目的地。如果数据丢失或发生错误,TCP 会自动重传数据。
- 流量控制:TCP 会根据网络的状况动态调整发送的数据量,以避免网络拥塞。
- 拥塞控制:通过算法(如慢启动、拥塞避免等)来控制数据的发送速率,以避免网络过载。
- 顺序性:数据包按照发送顺序到达,接收端可以按照相同顺序处理。
工作流程:
- 连接建立(通过三次握手):在数据传输开始之前,TCP 会通过三次握手(3-way handshake)来建立连接,确保通信双方都准备好了。
- 数据传输:数据传输过程中,TCP 会通过确认(ACK)和序列号确保每个数据包的可靠到达。
- 连接关闭:数据传输结束后,TCP 通过四次挥手(4-way handshake)来关闭连接,释放资源。
优点:
- 可靠性高:通过确认、重传、顺序控制等机制,确保数据的准确无误。
- 流量控制和拥塞控制:TCP 动态调整数据传输速率,避免网络拥塞。
- 顺序保证:确保数据包按顺序到达接收方。
缺点:
- 开销大:建立连接、确认和重传机制增加了额外的开销。
- 速度较慢:由于需要保证可靠性,TCP 的传输速度相对较慢。
应用场景:
- 文件传输 :如 FTP (文件传输协议)、SFTP。
- 网页浏览 :如 HTTP/HTTPS 协议,网页内容需要准确无误地传输。
- 电子邮件 :如 SMTP 、IMAP 、POP3 协议。
- 远程登录 :如 SSH 和 Telnet 等需要安全可靠通信的场景。
UDP(用户数据报协议)
基本概念:
- 无连接:UDP 不需要建立连接,不做数据的确认和重传。它直接将数据发送到目标地址,不保证数据包的可靠到达。
- 不保证可靠性:UDP 不会像 TCP 那样保证数据的顺序和完整性,数据可能丢失、重复或乱序。
- 无流量控制和拥塞控制:UDP 不会自动控制数据的发送速率,也不会监控网络拥塞。
- 头部开销小:UDP 的数据包头部比 TCP 小,不需要额外的握手和确认信息,传输效率较高。
工作流程:
- 无连接传输:UDP 直接发送数据包,没有连接建立的过程,不会进行确认,也不保证数据的可靠到达。
- 数据报文:UDP 将应用层数据分割为数据报(datagram)并通过 IP 网络发送,不提供数据的顺序、完整性或重传保障。
优点:
- 效率高:UDP 协议的开销较小,适合高效的数据传输。
- 低延迟:由于没有建立连接和进行确认,UDP 在传输过程中延迟较低。
- 适用于实时性要求高的应用。
缺点:
- 不可靠:没有确保数据传输的可靠机制,数据可能丢失、乱序。
- 没有流量和拥塞控制:UDP 发送数据时不会考虑网络的状态,容易造成网络拥塞。
应用场景:
- 视频和语音传输 :如 VoIP (语音通信)、视频会议 、流媒体等。对于实时传输,丢失少量数据包通常对用户体验影响不大。
- DNS 查询 :DNS(域名系统)使用 UDP 进行查询,因为 DNS 查询是简单的请求-响应模式,不需要确保连接可靠性。
- 实时在线游戏:UDP 被广泛应用于需要低延迟和高实时性的网络游戏中,虽然有可能丢包,但通过实时的数据流更新,用户体验通常不会受太大影响。
- 广播和组播 :如 DHCP (动态主机配置协议)和 SNMP(简单网络管理协议)使用 UDP。
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接(需要建立连接) | 无连接(直接发送数据) |
| 可靠性 | 可靠,保证数据的正确到达 | 不可靠,数据可能丢失、重复、乱序 |
| 数据顺序 | 保证数据的顺序 | 不保证数据顺序 |
| 流量控制和拥塞控制 | 有(控制数据传输的速率) | 无(无法控制数据传输速率) |
| 重传机制 | 有(丢失数据包会重传) | 无(丢失数据包无法重传) |
| 开销 | 较大(需要三次握手、四次挥手等) | 较小(无连接、无确认、无重传) |
| 速度 | 较慢(因确认、重传等操作开销) | 较快(没有复杂的确认机制) |
| 应用场景 | 文件传输、网页浏览、电子邮件等 | 视频流、语音通信、实时游戏等 |
Http和HTTPS的区别:
主要区别:
1、HTTP的连接是简单无状态的,HTTPS的数据传输是经过证书加密的,安全性更高。
2、HTTP是免费的,而HTTPS需要申请证书,而证书通常是需要收费的,而且费用一般不低
3、他们传输协议不同的,端口也是不一样的,HTTP默认端口是80端口,而HTTPS默认是443端口。
HTTPS的缺点:
1、HTTPS的握手协议比较费时,所以会影响服务的响应速度以及吞吐量。
2、HTTPS也并不是完全安全的,他的证书体系并不是完全安全的。并且HTTPS在面对DDOS这样的攻击时,几乎起不到任何作用
会产生很多的验证资源消耗
3、证书需要费钱,并且功能越强大的证书费用更高
https工作流程:
客户端访问页面给服务端发送TLS版本,随机数C 等
后端服务器选中一套加密方案,适配客户端和服务端 生成公钥和私钥返回给前端数字证书(公钥,域名,有效期等)
前端进行证书验证
验证通过后客户端生成预主密钥PMS,公钥加密发送给后端服务器,有后端服务器私钥解密
最终客户端和服务端使用 C+S+PMS三个随机数,生成会话密钥(对称密钥)
握手成功后,所有http数据均会使用会话密钥 进行对称加密传输
总结:HTTPS 核心原理
- 混合加密 :非对称加密(RSA/ECDHE) 安全交换密钥;对称加密(AES) 高效传输数据。
- 身份认证 :数字证书 + CA 签名 确保服务器真实可信,防中间人冒充。
- 数据安全 :加密防窃听 、MAC 防篡改 、序列号防重放。
REST
一组架构约束条件和原则
资源:
资源由url来定位,也就是一个url表示一个资源
表现层:
承接一个资源的展现形式,http请求头中的accept和content-type字段指定,这两个字段才是对表现层的描述
状态转化:
http协议是无状态的,那么这些状态肯定保存在服务端,所以客户端想要通知服务端改变数据和状态变化,要通过某种方式来通知它
通知方式是http协议,在http协议里面,四个表示操作方式的动词,
- (1)每一个 URI 代表一种资源;
- (2)客户端和服务器之间,传递这种资源的某种表现层;
- (3)客户端通过四个 HTTP 动词,对服务器端资源进行操作,实现 "表现层状态转化"。
通信分为:
单工通信:只走一条道,不回头
半双工通信:一条道,来回走,但不能同时走
全双工通信:两条道,来去互不干扰