概述
HTTP(Hypertext Transfer Protocol)是用于互联网上传输超文本的应用层协议,默认使用TCP端口80。其核心功能是封装和传输数据,组织为多行数据块(以\r\n
换行)。
http协议分为两部分:
- http请求:客户端给服务器发送数据的一种数据格式
- http响应:服务器给客户端回复数据使用的一种数据格式
HTTP/1.1 200 OK
Content-Type: text/html
<html>...</html>
http是一种无状态协议,这里的“无状态”指每个HTTP请求之间是独立且无关联的,服务器默认不会保存任何客户端的历史请求信息。
URL:即统一资源标识符,作为互联网上资源的唯一身份;(在浏览器的地址栏中输入的地址就是一 个URL);
http://127.0.0.1:80/index.html
http://
:协议类型127.0.0.1
:服务器地址:80
:端口(默认可省略)/index.html
:资源路径
http请求
- 客户端给服务器发送的一种数据格式,可以分为四部分:
1. 请求行: 指定提交数据的方式
2. 请求头: 多个键值对组成,客户端给服务器发送的数据描述符以及客户端身份描述符
3. 空行: 作用:代表请求头结束
4. 请求的数据:向服务器提交的数据(post);使用Get该位置为空
- http请求中有两种提交数据的方式
GET
get :申请获取资源而不对服务器产生任何其他影响(从服务器获取数据)
数据并没有在请求协议的第四部分而是在请求行
第一行:/---服务器提供的资源根目录(在服务器可以指定)
User-Agent:告诉服务器当前客户端使用的浏览器的版本
POST
post: 会影响服务器,服务器可能根据收到的数据动态创建新的资源,也可能更新原有资源(向服务器提交数据)
Content-Length :表示客户端向服务器提交的请求体(HTTP协议第四部分)的数据字节大小。服务器根据该值准确读取请求体内容。
Content-Type: 客户端向服务器提交的数据块格式 = http请求协议第四部分的数据块格式
=
字符
分隔键(key)和值(value)。解析时,左侧为键,右侧为值。示例:
name=John
→ 键为name
,值为John
。
+
字符
代表空格。在URL编码中会被替换为空格字符。示例:
query=hello+world
→ 解析为hello world
。
%
字符
表示后续两个十六进制字符为特殊字符的编码。需转换为十进制,再对应ASCII字符。示例:
%20
→ 十六进制20
= 十进制32
→ ASCII空格。
&
字符
分隔不同键值对。解析时标志当前键值对结束。示例:
name=John&age=30
→ 分割为name=John
和age=30
两组键值对。
Get和Post的区别
-
功能差异
- Get:主要用于客户端向服务器请求静态资源,例如网页、图片或文件等。它适用于数据量较少的场景。
- Post:用于向服务器提交动态数据,例如用户登录信息或文件上传/下载等。适合处理较大数据量的场景。
-
数据量差异
- Get:提交的数据会附加在请求协议的第二部分(即 URL 地址栏),由于浏览器地址栏缓存存在上限,数据量过大会导致部分数据丢失。
- Post:提交的数据位于请求协议的第四部分(即请求体),不受浏览器地址栏限制,能处理较大数据量。
-
安全性差异
- Get:提交的数据会直接显示在浏览器地址栏中,存在泄露风险,不适合传递敏感信息。
- Post:数据不会暴露在地址栏中,安全性更高,适合处理敏感数据。
http响应
服务器给客户端回复数据使用的一种数据格式
- 响应的组成分为四个部分
1.状态行
2.响应头:键值对
3.空行:
4.响应的数据
第1行:状态行
- HTTP/1.1: http协议版本
- 200: 状态码
- Ok:状态码对应的描述
第2--9行:响应头
-Content-Type:服务器给客户端回复的格式 = http响应第四部分的数据块格式
text/plain ==> 纯文本
charset=iso-8859-1 ==>数据的字符编码
iso-8859-1 ==>不支持中文
utf8:支持中文
-Content Length:服务器给客户端回复的长度 = http响应第四部分的数据块字节数
第10行:空行
第11--16行:服务器给客户端回复的响应数据
应答状态
http vs https
HTTP
- 传输方式:明文传输,数据未加密,容易被拦截或篡改。
- 端口:默认使用 80 端口。
- 安全性:无加密机制,不适合传输敏感信息(如密码、支付信息)。
- 证书:不需要 SSL/TLS 证书。
- 性能:由于无需加密解密,速度略快于 HTTPS。
HTTPS
- 传输方式:加密传输,数据通过 SSL/TLS 加密,防止窃听和篡改。
- 端口:默认使用 443 端口。
- 安全性:提供身份验证和数据完整性保护,适用于敏感数据。
- 证书:需部署 SSL/TLS 证书,由可信 CA(证书颁发机构)签发。
- 性能:加密过程会增加少量计算开销,但现代硬件优化已基本消除性能差异。