HTTP

0 阅读10分钟

HTTP

概述

  • HyperText Transfer Protocol:超文本传输协议,工作中应用层,制定了一种网页资源传输标准;
  • 传输层基于TCP/80端口进行数据传输;

软件架构

C/S

Client/Server:客户端/服务器 架构

优势

性能高,体验好:客户端可以承担大量运算和图形渲染(如游戏、CAD),响应速度快,界面交互丰富流畅。

可离线操作:核心数据和功能可预装或缓存,在网络不稳定或无网络时仍能进行部分操作(如单据填写、文档编辑)

充分利用本地资源:可以方便地调用本地硬件(如打印机、扫描仪、指纹仪、高精度传感器)

安全性可控:采用自定义的通信协议和加密方式,相对封闭,数据链路控制更强。

劣势

部署和维护成本高:每台客户机都需要安装、配置和升级。

跨平台性差:针对Windows、iOS、Android需要开发不同的客户端,开发成本高

应用场景
  • 对性能和界面要求高的专业软件
  • 需要频繁使用本地硬件的软件

B/S

  • Browser/Server:浏览器/服务器 架构
优势

无需安装,使用便捷:用户只需记住网址或扫码即可使用,极大降低了使用门槛。

维护和升级极其方便:开发者只需更新服务器端程序,所有用户下次访问即是最新版本。

完美的跨平台性:任何有标准浏览器的设备(PC、Mac、Pad、手机、智能电视)均可使用。

劣势

高度依赖网络和服务器:网络质量直接影响体验;服务器宕机,所有用户无法使用

性能和体验存在天花板:受限于浏览器沙盒环境和网络延迟,在复杂图形处理、实时交互上不如原生C/S应用。

本地硬件访问能力弱:出于安全考虑,浏览器对本地硬件(如特定串口设备)的访问权限有严格限制

安全性面临更多挑战:暴露在公共互联网,需应对各种常见的Web攻击

典型应用场景
  • 面向广大公众的互联网服务
  • 企业协同办公平台

URL

  • 统一资源定位系统(uniform resource locator;URL)是因特网万维网服务程序上用于指定信息位置的表示方法。俗称“网址”。

格式

  • 协议:确定数据传输标准,常见为http或https;
  • 主机:确定目标服务器,一般为IP或域名,127.0.0.1localhost代表本机;
  • 端口号:确定服务器程序,http默认端口为80,https默认端口为443;
  • 资源路径:确定目标资源的访问路径,一般为目标资源在服务器程序中的存储路径,如果未指定资源路径,默认访问网站首页(index)
  • 附加信息:可选,为客户端发送给服务器无机密性要求的数据;

网站资源

image-20260121102034876

请求与响应

  • 请求(reqquest,req):客户端发送给服务器的数据包,该数据包携带了客户端相关信息,用于向服务器索取资源或提交数据到服务器处理;
  • 响应(response,resp):服务器发送给客户端的数据包,该数据包携带了服务器相关信息,用于响应对应请求的处理结果;
  • HTTP协议规定一个请求只能请求服务的一个资源,请求和响应数据包格式由HTTP协议统一规定;

无状态

  • 不支持保存用户状态;
  • 可用Cookie和Session技术实现用户状态保存;

明文传输

  • 数据在网络中以明文方式传输,容易 造成数据泄露;

请求类型

GET
  • 目的:向服务器索取资源的请求;
  • 传参方式:以URL传参;(www.new.com:8080/login.html?…)
  • 传参大小:收URL总长度限制;
  • 安全性:数据会暴露在URL地址,并且历史记录也保留传参数据;
  • 浏览器会缓存get响应
POST
  • 目的:向服务器发送数据的请求;
  • 传参方式:正文传参
  • 传参大小:请求正文传参理论上无上限;
  • 安全性:正文传参相较URL传参更安全;
GET vs POST 核心对比
对比维度GET 请求POST 请求
核心目的索取资源 - 从服务器获取数据(查询、读取)提交数据 - 向服务器发送数据以创建/更新资源
传参位置URL末尾 ?key1=value1&key2=value2主要:请求正文(Body)  也可在URL,但不推荐
传参可见性完全暴露在地址栏、浏览器历史、服务器日志正文参数不可见于地址栏,更隐蔽
数据长度限制有,较小 受URL最大长度限制(通常2048字符以内)理论上无限制 实际受服务器配置约束
安全性较低 参数直接暴露,不适合传输敏感信息(密码、密钥)相对较高 正文参数不直接暴露,但仍需HTTPS加密
缓存与书签可缓存可收藏为书签默认不可缓存不可收藏
浏览器历史保留参数不保留正文参数
主要应用场景搜索、页面跳转、资源下载登录、注册、表单提交、文件上传
请求正文(body)
  • GET请求无正文;
  • POST请求正文为要提交给服务器的数据;
常见的MIME-Type

application/x-www-form-urlencoded(表单)

application/json(JSON)

multipart/form-data; boundary=——WebKitFormBoundaryWJg0B4RuuPnLRQCA

概述

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式

浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL,因此 We b服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。

给数据打标签,告知浏览器或应用程序应该如何处理接收到的数据,从而确保文本、图片、视频等不同格式的内容能被正确识别、解析和呈现。

网页基础 (Web Foundations)

这些是构成每个网页的基石。

MIME 类型文件扩展名用途与说明
text/html.html.htm超文本标记语言。所有网页的根基,浏览器会解析并渲染
text/css.css层叠样式表。定义网页的视觉样式和布局。
text/javascript application/javascript.js.mjsJavaScript代码。实现网页的动态交互与逻辑。text/javascript 是现代标准。
数据交换 (Data Interchange)

API通信和配置的核心格式。

MIME 类型文件扩展名用途与说明
application/json.jsonJSON格式数据现代API前后端通信的事实标准,轻量且结构化。
application/xml.xmlXML格式数据。用于一些传统Web服务、配置文件(如RSS、SOAP)。
application/x-www-form-urlencoded(无)URL编码的表单数据。HTML表单默认的提交格式(如 name=value&key=value)。
multipart/form-data(无)多部分表单数据。HTML表单需要上传文件时必须使用的格式。
图像 (Images)

不同格式适用于不同场景。

MIME 类型文件扩展名用途与说明
image/jpeg.jpg.jpegJPEG图像。适用于照片等颜色丰富的图片,有损压缩
image/png.pngPNG图像。支持透明度,适用于图标、图形,无损压缩
image/gif.gifGIF图像。支持简单动画和透明度。
应用程序与其他 (Application & Others)
MIME 类型文件扩展名用途与说明
application/octet-stream(任意)未知的二进制流。这是浏览器对未知类型文件的默认处理方式,会强制触发下载
响应(Response)
HTTP响应状态码
  • HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。
常见状态码
  • 200:响应成功;
  • 301:永久重定向,表示该资源使用了新的资源路径,以后请求该资源都使用新资源路径;
  • 302:临时重定向,表示该资源使用了新的资源路径,本次请求使用新资源路径;
  • 400:请求报文语法错误,请求数据不符合HTTP协议语法规定;
  • 401:当前请求需要用户验证(鉴权);
  • 403:服务器拒绝;(缺少权限)
  • 404:资源找不到;
  • 500:服务器错误,服务器执行目标资源时发生内部错误;
状态码优化解释与核心要点典型场景
200请求完全成功成功加载页面
301永久重定向。资源已永久移至Location头指定的新URI。浏览器和搜索引擎会更新书签、更新链接指向新地址网站改版更换域名,旧链接应永久跳转到新位置。
302临时重定向。资源临时从另一个URI响应。本次请求用新URI,但客户端未来应继续使用原地址。浏览器不会缓存此跳转关系。用户未登录时访问个人中心,临时重定向到登录页。
304未修改重要!用于缓存控制。客户端携带缓存标识(如If-Modified-Since)请求,服务器判断资源未变,则返回此码,不包含响应体,告诉客户端“直接用缓存”。刷新页面时,很多静态资源(如图片、CSS)会返回此状态,极大节省带宽。
400错误的请求服务器因请求的语法、格式错误而无法理解。这是最笼统的客户端错误。1. 请求体JSON格式错误 2. 缺少必需的参数 3. 参数类型错误。
401未认证。请求需要用户验证。此状态表示“你是未知用户”,需提供有效身份凭证(如用户名密码、Token)。响应应包含WWW-Authenticate头指导如何认证。1. 访问需要登录的API而未提供登录凭证 2. 凭证已过期。
403禁止访问。服务器理解请求,但拒绝执行没有足够的权限访问此资源。1. 普通用户尝试访问管理员后台 2. 访问服务器上禁止读取的系统文件。
404未找到。服务器找不到请求的资源。也可能是服务器不想告诉你为什么拒绝(出于安全)而返回的通用错误。1. 用户访问了一个已删除或不存在的页面URL 2. 静态资源路径错误。
429请求过多重要!客户端在给定时间内发送了过多请求(“限流”或“防刷”)。1. API调用频率超限 2. 短信验证码请求过于频繁。
500服务器内部错误。最笼统的服务器错误。服务器遇到了一个未曾预料的状况,导致它无法完成对请求的处理。1. 后端代码出现未捕获的异常 2. 数据库连接突然失败。
502坏网关。作为网关或代理的服务器,从上游服务器接收到无效响应。Nginx反向代理的后端应用(如Tomcat)崩溃或无响应。
503服务不可用。服务器当前无法处理请求(通常是因为过载或停机维护)。通常可配合Retry-After头告知客户端何时重试。1. 服务器正在进行维护 2. 并发用户数达到极限,系统过载。
504网关超时。作为网关或代理的服务器,未能及时从上游服务器收到响应。Nginx在配置的时间内,未收到后端FastCGI(PHP-FPM)或应用服务器的响应。