请求区别及app网站区别

端开发:App 客户端 vs Web 网站 完整差异(含 HTTP 请求方法区分)

一、整体架构、会话、业务开发区别

1. Web 网站(浏览器访问)

  1. 载体:浏览器,无本地数据库,仅靠 localStorage 临时缓存,断网无法使用
  2. 会话机制:Cookie + Session,浏览器自动携带 Cookie,存在 CSRF 攻击风险
  3. 交互:早期页面渲染,前后端分离 SPA,存在浏览器同源跨域限制,自动发起 OPTIONS 预检请求
  4. 缓存:浏览器自动缓存 GET 接口,地址、参数存入历史记录、书签
  5. 消息推送:仅 WebSocket、浏览器通知,关闭页面收不到消息,无系统级推送
  6. 版本控制:无需客户端版本校验,后端更新浏览器刷新即生效
  7. 安全重点:XSS 过滤、CORS 跨域配置、CSRF 令牌校验

2. App(安卓 /iOS)

  1. 载体:原生 / Flutter 混合端,内置 SQLite 本地数据库,支持离线存储、离线操作同步
  2. 会话机制:Token/JWT 存客户端,请求头手动携带,搭配 RefreshToken 无感续登;支持多设备登录、挤下线
  3. 交互:纯 JSON API 交互,不存在浏览器跨域,无 OPTIONS 预检请求
  4. 缓存:后端提供增量同步接口,根据本地更新时间只返回新增数据,节省流量
  5. 消息推送:对接华为 / 小米 / APNs 厂商推送,APP 离线也能接收通知,后端需开发推送下发接口
  6. 版本控制:配套版本检测接口,支持强制更新、灰度分发、功能开关
  7. 安全重点:请求参数签名、时间戳防重放、设备指纹风控、接口请求体加密、Token 黑名单登出
  8. 额外配套接口:崩溃日志上报、埋点行为上报、分片断点续传、批量离线数据同步

二、HTTP 全部请求方法作用、使用规范(网站 & App 通用底层标准)

全部 9 种标准 HTTP 请求

  1. GET 作用:只读查询数据,不修改服务器资源,天然幂等 参数放在 URL 地址栏,URL 长度有限制,不支持大文件;浏览器自动缓存、保存历史。 适用:查询列表、商品详情、个人信息、订单列表。

  2. POST 作用:新增资源、提交业务操作、上传文件,非幂等,重复请求会重复生成数据 参数放请求 Body,支持 JSON、表单、二进制大文件,无长度限制。 适用:登录注册、创建订单、发布评论、上传图片。

  3. PUT 作用:全量更新资源,需传入该资源完整字段,幂等。 适用:完整替换用户全部信息、完整修改商品全部参数。

  4. PATCH 作用:局部更新资源,仅传入需要修改的字段,幂等。 适用:只改昵称、只修改手机号、单独修改商品价格。

  5. DELETE 作用:删除资源,幂等,多次删除效果一致。 适用:删除购物车、删除订单、删除评论。

  6. HEAD 类似 GET,但服务器只返回响应头,不返回数据体;用于检测链接是否有效、获取文件大小。

  7. OPTIONS 浏览器跨域时自动发起的预检请求,询问后端允许的请求方式、跨域域名,业务无需手动调用。

  8. TRACE 请求回环测试,存在安全风险,线上项目全部禁用,业务开发不用。

  9. CONNECT 代理隧道转发,仅运维代理服务使用,后端业务开发接触不到。

REST 统一使用对照表

表格

业务需求 推荐请求方法
查询数据(列表 / 详情) GET
新增数据、提交表单 POST
完整替换整条数据 PUT
仅修改部分字段 PATCH
删除数据 DELETE
跨域预检 OPTIONS
预校验资源不获取内容 HEAD

三、网站与 App 在 GET/POST 等请求上的实操差异

相同底层规则

  1. HTTP 协议标准完全统一,GET/POST/PUT/DELETE 语义不分网页、App;
  2. 一套后端接口可同时提供给网页和 App 使用;
  3. 状态码、请求头、HTTPS 加密规则通用。

实际开发不同点

  1. GET 请求
  • 网页:大量 URL 拼接参数,浏览器自动缓存、存历史;受 CORS 跨域限制;敏感参数会留在地址栏,有泄露风险。
  • App:可使用 GET,但复杂筛选会改用 POST 传 JSON;无跨域预检;无浏览器缓存,全靠本地缓存;查询类敏感接口常加签名校验。
  1. POST 请求
  • 网页:支持 form 表单、JSON 两种传参;Cookie 自动携带登录会话,需要 CSRF 校验。
  • App:统一 JSON 请求体,几乎不用表单;Header 手动携带 Token、设备 ID、签名、版本号;后端统一校验签名、防重放、防重复提交。
  1. PUT/PATCH/DELETE
  • 网页:老旧项目兼容差,很多只用 GET/POST 模拟修改删除。
  • App:无浏览器兼容问题,严格遵循 REST 规范,正常使用 PUT/PATCH/DELETE。

四、完整业务示例对照(登录 + 查询商品)

1.Web 网站

登录 POST /web/login

表单参数拼接,浏览器自动携带 Cookie,后端校验 CSRF;服务端生成 Session 存入 Cookie,无需手动传头部。

查询商品 GET /web/goods/list?page=1

Cookie 自动携带登录凭证,浏览器缓存,无设备、版本、签名参数。

2.App 客户端

登录 POST /app/login

请求体 JSON 包含账号密码、设备 ID、版本号、时间戳、签名;后端先校验签名防篡改;返回 JWT Token + 刷新 Token。

查询商品 GET /app/goods/list?page=1&lastUpdateTime=178888888

请求头手动携带 Token、设备号、版本、签名;后端校验 Token、签名、判断 APP 版本是否过低;根据 lastUpdateTime 增量返回数据,返回多尺寸图片地址。

五、最常用 5 种

1. GET

作用:查询、读取资源,只读不修改数据

  • 参数:放 URL 查询参数
  • 幂等:多次请求效果完全一样,无副作用
  • 限制:URL 长度有限,不能传大文件
  • 使用场景: 查询列表、详情、首页数据、字典、个人信息 示例:GET /goods/1 查询 id=1 商品

2. POST

作用:新增资源、提交表单、执行操作、上传文件

  • 参数:放在请求 Body
  • 非幂等:重复调用会重复创建数据(重复下单、重复注册)
  • 优势:支持大量数据、二进制文件、JSON
  • 使用场景: 登录、注册、下单、发布评论、上传图片、提交表单 示例:POST /order 创建订单

3. PUT

作用:全量更新资源(完整覆盖修改)

  • 语义:替换整个资源,必须传完整实体字段
  • 幂等:多次提交同一套数据,结果不变
  • 使用场景:完整修改用户信息、完整更新商品全部信息 示例:PUT /user/1 完整更新 id=1 用户所有信息

4. PATCH

作用:局部更新资源(只改部分字段)

  • 和 PUT 区别:只传需要修改的字段,不用传全部
  • 幂等
  • 使用场景:修改昵称、单独改手机号、仅修改商品价格 示例:PATCH /user/1 只更新 nickname

5. DELETE

作用:删除资源

  • 幂等:删一次和删多次结果一致
  • 使用场景:删除订单、删除购物车、删除评论 示例:DELETE /cart/10 删除购物车 id=10 条目

六、REST 开发次要标准方法(项目偶尔用到)

6. HEAD

和 GET 几乎一模一样,但服务器只返回响应头,不返回响应体

  • 用途:只检测接口是否正常、获取文件大小、判断资源是否存在,不拿数据
  • 场景:下载前预校验文件、检测图片链接是否失效

7. OPTIONS

预检请求,浏览器跨域自动发起

  • 作用:询问服务器允许哪些请求方法、允许跨域域名、请求头
  • 开发场景:前端 SPA 跨域时浏览器自动发送,后端需要配置 CORS 响应

8. TRACE

回环测试,服务器原样返回请求内容

  • 基本线上禁用,有安全风险,业务开发几乎不用

9. CONNECT

建立隧道代理,用于 HTTPS 代理转发

  • 后端业务开发完全接触不到,运维 / 代理服务器使用
相关推荐
w1395485642219 小时前
鸿蒙原生开发手记:徒步迹 - 图片加载与缓存优化
后端
程序员爱钓鱼20 小时前
Rust 数组 Array 详解:定义、访问、遍历与切片
后端·rust
前端工作日常1 天前
我学习到的Java类和对象区别
java·后端
前端工作日常1 天前
我学习到的Java类完整结构
java·后端
Csvn1 天前
📊 SQL 入门 Day 6:多表查询 — JOIN 的四种姿势
后端·sql
hold?fish:palm1 天前
RDB全量快照备份
c++·redis·后端
LucianaiB1 天前
我把刘备一生做成了可播放的高德地图,还把整套方法封装成了 Skill
后端
Reart1 天前
操作系统实验哈工大lab2——系统调用
后端·操作系统
IT_陈寒1 天前
React useEffect依赖数组中埋的坑,这次终于让我逮到了
前端·人工智能·后端