什么是超文本传输协议:网页通信基础
什么是超文本传输协议,简称HTTP,是一套规定浏览器和网页服务器之间收发数据的通信规则,它定义请求报文、响应报文的格式与交互流程,主要用来传输网页文本、图片、样式文件、脚本等资源,运行在TCP协议之上,默认使用80端口,该协议属于明文传输,传输内容可被中间节点读取,适合静态资讯页面、公开资源分发这类不携带账号密码、支付信息的场景,如果你需要传输敏感数据,应当搭配TLS形成HTTPS使用。
超文本传输协议的交互流程
一次完整的HTTP交互分为建立TCP连接、客户端发起请求、服务器返回响应、断开连接四个环节,HTTP1.1版本支持长连接,单次TCP连接可以连续完成多次请求响应,不用每加载一张图片就重新握手,能降低延迟。客户端请求报文由请求行、请求头、请求体三部分组成,请求行包含请求方法、资源路径、协议版本,请求头携带浏览器类型、编码格式、缓存标识等附加信息,请求体一般在POST请求中用来提交表单数据。
服务器收到合法请求后,组装响应报文回传给客户端,响应报文包含状态行、响应头、响应体,状态码用来快速标记处理结果,200代表正常返回资源,301代表永久跳转,404代表目标资源不存在,500代表服务器内部出错。浏览器拿到响应体之后,解析HTML代码,再继续发起新的HTTP请求,拉取页面内引用的图片、CSS、JS文件,最终渲染出完整网页。
请求方法决定客户端想要执行的动作,常用方法有GET、POST、PUT、DELETE。GET多用于读取资源,参数拼接在URL里面,长度存在一定限制,适合查询类操作;POST多用于提交数据,参数放在请求体内,长度限制宽松,适合表单提交、文件上传。
超文本传输协议不同版本差异
| 协议版本 | 核心特点 | 适用场景 |
|---|---|---|
| HTTP/1.1 | 支持长连接、缓存控制,存在队头阻塞问题 | 存量网站、简单网页 |
| HTTP/2 | 二进制帧传输,多路复用,解决队头阻塞 | 图片资源多、组件密集的网页 |
| HTTP/3 | 基于QUIC协议,UDP传输,握手更快 | 弱网环境、移动网络访问 |
队头阻塞是HTTP/1.1比较突出的局限,同一个连接里前面的请求没有完成,后面的请求只能排队等待,资源加载顺序会被拖慢。HTTP/2把数据拆成独立帧,同一连接可以并行传输多个请求,互不干扰,不过仍然依赖TCP,TCP丢包还是会影响整条链路。HTTP/3更换底层传输协议为QUIC,丢包只影响对应数据流,其余请求不受干扰。
HTTP本身没有内置加密机制,数据包以明文形式在网络中转发,路由器、运营商节点都可以抓取查看报文内容。
这是HTTP最核心的短板。
HTTPS并不是全新协议,只是在HTTP外层增加TLS加密层,数据传输前先完成握手协商加密密钥,报文经过加密处理,第三方无法直接读取原始内容,登录、支付、后台管理系统这类场景普遍采用HTTPS。
超文本传输协议本身不记录会话状态,属于无状态协议,服务器不会自动记住上一次请求的客户端信息,网站依靠Cookie、Session、Token来维持用户登录状态,每次请求时浏览器自动携带Cookie,服务器识别对应的用户标识,以此区分不同访问者。
缓存机制是HTTP提升访问速度的重要手段,依靠Cache-Control、ETag、Last-Modified这类响应头控制缓存策略,浏览器可以把静态资源保存在本地,再次访问时直接复用本地缓存,减少向服务器发起请求的次数,降低服务器压力,同时缩短页面加载耗时。
