一、HTTP是什么
HTTP是应用层协议,底层基于TCP传输。TCP只负责把字节数据从一端传到另一端;HTTP规定这些字节该是什么格式,实现浏览器与服务器之间通信。
二、两种架构模型
C/S 客户端-服务器模型
代表:QQ、桌面客户端软件
- 优点:资源本地存放,访问速度快,离线部分功能可用
- 缺点:占用本地存储;不同系统要单独开发版本;服务更新,客户端必须升级
B/S 浏览器-服务器模型
代表:网页、Web页面
- 优点:全部资源部署在服务器;服务更新不需要改动用户端;只要有浏览器就可以访问,跨平台通用
- 缺点:每次使用都要网络从服务器拉取资源
三、URL(统一资源定位符)
text
协议://主机:端口/资源路径
- 协议 :
http/https - 主机:域名或者IP地址,DNS会把域名翻译成IP
- 端口
- HTTP默认端口:80
- HTTPS默认端口:443
- 路径:服务器上资源的位置
四、完整HTTP通信流程
- 在浏览器输入URL
- DNS解析域名,拿到服务器IP
- 通过TCP,和服务器建立连接(三次握手)
- 浏览器发出HTTP请求报文
- 服务器处理业务,返回HTTP响应报文
- 数据交互完毕,断开TCP连接
五、HTTP请求报文结构
整体分为四部分:请求行、请求头部、空行、请求体
text
请求行:方法 资源路径 HTTP版本\r\n
请求头部:字段名: 值\r\n
......\r\n
// 空行,标志头部结束
请求体 // GET一般为空,POST存放提交的数据
请求行
- 请求方法
GET:获取资源,参数拼接在URL后面,没有请求体POST:提交数据,表单、上传,数据放在请求体PUT:修改/上传服务器资源
- URL路径:要访问的资源
- 版本:
HTTP/1.1
重点:HTTP换行必须是
\r\n(CRLF),最后的空行\r\n不能省略,否则服务器无法识别报文。
请求头部
以键: 值格式,传递附加信息:浏览器类型、编码格式、连接方式等。
六、HTTP响应报文结构
状态行、响应头部、空行、响应体
text
状态行:HTTP版本 状态码 描述信息\r\n
响应头部:字段名: 值\r\n
......\r\n
响应体:网页HTML、JSON数据等真正返回的内容
状态码分类
| 类别 | 含义 |
|---|---|
| 1xx | 提示信息,请求正在处理 |
| 2xx | 请求成功 |
| 3xx | 重定向,需要进一步访问其他地址 |
| 4xx | 客户端错误,例如404资源找不到 |
| 5xx | 服务器内部错误 |
高频记忆:
- 200 OK:请求成功
- 404 Not Found:资源不存在
- 500:服务器内部出错
七、GET 和 POST核心区别
- GET:用于查询获取数据,参数放在URL,没有请求体,适合读操作。
- POST:用于提交数据,参数放在请求体,适合提交表单、上传。
安全层面:GET参数暴露在地址栏,不适合传递敏感信息。
八、Socket视角理解HTTP
HTTP只是字符串格式的约定,本身不负责传输。
- 程序调用socket,建立TCP连接。
- 在应用层,手动拼接符合HTTP格式的字符串,通过send发给服务器。
- recv读取服务器返回的字节流,按照HTTP格式解析状态码、头部、网页内容。
- TCP断开,recv返回0,代表通信结束。
高频坑点
- 只写
\n而不是\r\n,服务器解析失败。 - 缺少头部结束的空行,服务器一直阻塞等待请求。
- TCP是字节流,数据不会一次性全部接收完成,需要循环读取。
- HTTPS不是单纯HTTP,需要SSL加密,普通socket不能直接访问443端口。
九、拓展:长连接与短连接
- 短连接(HTTP1.1默认):一次HTTP请求完成,就断开TCP连接。
- 长连接 keep-alive:在请求头开启,一次TCP连接可以多次收发HTTP报文,减少频繁建立断开连接的开销。
十、核心考点总结
- HTTP属于应用层协议,底层依托TCP。
- B/S架构不需要安装客户端,依靠浏览器访问;C/S需要安装专门客户端。
- URL四要素:协议、主机、端口、路径。
- 请求报文:请求行-请求头-空行-请求体;响应报文:状态行-响应头-空行-响应体。
- 状态码第一位代表错误大类:2成功,4客户端错,5服务端错。
- GET放URL传参,POST放请求体传参。