一、http协议
1、http 超文本传输协议
HTTP(Hypertext Transfer Protocol)是一种用于在Web上传输数据的协议,规定了服务端和客户端之间的数据传输格式及其标准。
HTTP协议是一种应用层协议,它是基于TCP/IP协议开发的。HTTP在TCP之上,而TCP在IP之上,形成了一个层次化的协议栈,这种组合允许HTTP协议通过互联网进行通信。HTTP协议负责定义客户端和服务器之间请求和响应的格式和规则,而TCP和IP协议负责确保
数据包的可靠传输和路由。
2、http协议的五大特性
请求-响应模型(Request-Response)
HTTP协议采用客户端-服务器模型,客户端发送请求到服务器,服务器处理请求并返回响应给客户端。
短连接(Connectionless)
HTTP协议是一种无连接的协议,即每个请求和响应都是独立的,服务器在完成客户端请求的响应后,立即断开连接。这样的特性使得服务器能够处理大量的请求,而不需要长时间保持连接状态,从而节省服务器资源。
无状态(Stateless)
HTTP协议是无状态的,即服务器不会保存之前请求的任何信息。每个请求都是独立的,服务器不能识别请求是否来自同一个客户端或之前的请求历史。这使得服务器设计简单,并且能够更好地扩展,但同时也要求在需要保持状态的应用场景下使用额外的机制,如Cookie或Session。
支持多媒体(Media-independent)
HTTP协议不仅仅支持传输HTML文本,还可以传输各种类型的数据,包括图片、音频、视频、文件等。这使得HTTP成为一个通用的应用层协议,可以用于传输各种不同类型的数据。
长连接( Keep-Alive)连接
-
减少连接建立和断开的开销:TCP连接的建立和断开会消耗一定的时间和资源,通过使用长连接,可以减少这些开销,从而提高性能和响应速度。
-
减少服务器负担:长连接使得服务器可以处理多个请求,而不必为每个请求建立新的连接。这在高并发的情况下特别有用,可以减轻服务器的负担。
-
并行传输:由于长连接可以在同一时间内传输多个请求和响应,客户端可以并行发送多个请求,而不必等待每个请求的响应。这有助于提高页面加载速度和资源获取效率。
虽然长连接可以提供更高的性能和效率,但它也需要服务器维护打开的连接,并在适当的时候关闭空闲连接,以防止资源浪费和连接过多导致的问题。为了解决长连接中的潜在问题,HTTP/1.1引入了"Connection: keep-alive"头部来明确指示使用长连接。在HTTP/1.1中,默认情况下,连接都是持久的,除非显式地指定"Connection: close"头部,以关闭连接。
值得注意的是,HTTP/2及更高版本使用了全新的多路复用技术,不再依赖于长连接来实现并行传输,因此在HTTP/2中,长连接的意义不同于HTTP/1.1时代。
3、http 协议的请求数据格式
常用的版本号就是http1.X版本,新版本应该是http2.x
请求首行(请求方式、协议/版本号)
请求头
\r\n
请求体(不是什么请求方式都有的,GET请求方式没有)
<Method> <Request-URI> <HTTP-Version> <Headers> <Optional Request Body>
4、HTTP协议的响应数据格式
响应首行(响应状态码)
响应头
\r\n
响应体
<HTTP-Version> <Status-Code> <Reason-Phrase> <Headers> <Optional Response Body>
5、请求方式(重要)
GET
用于请求获取指定资源的数据
协议:// 域名/后缀/?参数
协议:// 域名/后缀/?k=v&k1=v1&k2=v2...
POST
用于向服务器提交数据,通常用于创建新的资源。例如百度的登录功能,把用户名和密码提交到百度的后端做验证.用的就是POST请求
PUT
用于向服务器更新或替换指定资源的数据。PUT请求是幂等的,多次请求同一个URL应该产生相同的结果。
DELETE
用于请求服务器删除指定资源。DELETE请求是幂等的,多次请求同一个URL应该产生相同的结果。
PATCH
用于对资源进行部分更新,只传输需要修改的部分。PATCH请求是非幂等的。
HEAD
类似于GET请求,但服务器只返回响应头部信息,不返回实际数据。主要用于获取资源的元数据,比如资源是否存在、最后修改时间等。
OPTIONS
用于获取目标资源支持的请求方法和其他选项信息。
TRACE
用于追踪请求-响应的传输路径,主要用于调试和测试。
CONNECT
用于建立与代理服务器的隧道连接,通常用于代理服务器的身份验证。
6、get请求和post请求的区别
-
参数传递位置:
- GET请求:参数是通过URL的查询字符串传递的,在URL中以键值对的形式出现,例如:
http://www.example.com/page?param1=value1¶m2=value2
- POST请求:参数是通过请求体(Request Body)传递的,参数不会直接显示在URL中。
- GET请求:参数是通过URL的查询字符串传递的,在URL中以键值对的形式出现,例如:
-
安全性:
- GET请求:参数在URL中明文显示,因此不适合传递敏感信息,比如密码等。GET请求可以被缓存、浏览器历史记录等留存,可能会暴露敏感信息。
- POST请求:参数在请求体中传递,不会明文显示在URL中,相对于GET请求更安全,适合传递敏感信息。
-
请求体:
- GET请求:没有请求体,因为参数是在URL中传递的。
- POST请求:有请求体,参数包含在请求体中,格式可以是多种类型,比如JSON、表单数据等。
-
请求长度限制:
- GET请求:受浏览器和服务器限制,一般有长度限制,较大的数据可能会被截断。
- POST请求:没有固定的长度限制,可以传输大量数据。
-
幂等性:
- GET请求:通常是幂等的,多次请求同一个URL应该返回相同的结果。
- POST请求:不一定是幂等的,多次请求同一个URL可能会产生不同的副作用。
-
使用场景:
- GET请求:适合用于获取资源,比如获取页面、图片等。
- POST请求:适合用于提交数据,比如表单提交、上传文件等。
二、
标签:协议,HTTP,请求,GET,前端,html,服务器,连接,三剑客 From: https://www.cnblogs.com/dgp-zjz/p/17560241.html