当前位置: 首页 > news >正文

【Javaweb】http协议-请求与响应

引入:

我们在idea上运行程序后可以通过浏览器访问http://localhost:8080 来获取程序的返回结果,这是一个浏览器和服务器交互的过程。

服务器:(可以理解为ServerSocket)

  • 接收到浏览器发送的信息(如:/hello
  • 在服务器上找到/hello的资源
  • 把资源发送给浏览器

网络三要素

  • IP :网络中计算机的唯一标识
  • 端口 :计算机中运行程序的唯一标识
  • 协议 :网络中计算机之间交互的规则

浏览器和服务器进行数据交互时用的协议是http协议

“HTTP 协议就是基于 IP 和端口建立的连接之上,规定数据如何组织和传输的应用层协议。”

HTTP协议

“HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间请求与响应数据格式交互规则应用层协议。

http协议要求:浏览器在向服务器发送请求数据时,或是服务器在向浏览器发送响应数据时,都
必须按照固定的格式进行数据传输
http协议分为请求协议和相响应协议,在浏览器中通过F12快捷键进入开发者工具中的Network        部分可以查看具体格式

学习HTTP主要就是学习请求和响应数据的具体格式内容。

请求协议:浏览器将数据以请求格式发送到服务器
包括:请求行请求头 请求体
响应协议:服务器将数据以响应格式返回给浏览器
包括:响应行 响应头 响应体

请求协议

请求行 :

HTTP请求中的第一行数据。由: 请求方式 资源路径 协议/版本 组成(之间使用空格分隔)

请求方式:GET
资源路径:/brand/findAll?name=OPPO&status=1
请求路径:/brand/findAll
请求参数:name=OPPO&status=1
请求参数是以key=value形式出现
多个请求参数之间使用 & 连接
请求路径和请求参数之间使用 ? 连接
协议/版本:HTTP/1.1
请求头 :

第二行开始,上图黄色部分内容就是请求头。格式为key: value形式http是个无状态的协议,所以在请求头设置浏览器的一些自身信息和想要响应的形式。这样 服务器在收到信息后,就可以知道是谁,想干什么了

  • Host: 请求的目标主机和端口号(HTTP/1.1 必需,用于虚拟主机)。
  • User-Agent: 告知服务器客户端的浏览器类型、版本等信息。
  • Content-Type(对于 POST 非常重要) 指定请求体的格式,例如 application/x-www-form-urlencoded(表单默认)、multipart/form-data(文件上传)、application/json
  • Cookie: 将之前服务器设置的状态信息发送给服务器。
post方式的请求
  • GET 的语义是 “获取” 数据。它应该用于从服务器读取(查询)信息,而不应该改变服务器上的任何状态。

  • POST 的语义是 “提交” 数据。它用于向服务器发送需要处理的数据,通常会导致服务器状态的改变(如更新、创建)。

POST 示例:用户登录

  • 你点击登录按钮后,浏览器发出的请求URL可能是:https://example.com/login

  • 而你的用户名密码则被放在看不见的请求体中传输

    {"username": "myuser", "password": "mypass123"}

幂等性 (Idempotency) - 非常重要的概念

这是一个理解 RESTful API 设计的关键概念。

  • GET 是幂等的:意味着执行一次和执行多次效果完全一样。你只是获取数据,不会改变服务器状态。你刷十次百度搜索,搜索结果可能会变(因为数据本身更新了),但服务器端不会因为你的十次请求而产生十条新的搜索记录。

  • POST 是非幂等的:意味着每次执行都可能产生不同的结果。比如,你点击“下单”按钮(POST请求),第一次会创建一笔新订单。如果你因为网络卡顿而重复提交了多次,就可能会创建多个相同的订单。(因此,后端API设计必须考虑防止重复提交)。

比较
特性GET 方法POST 方法
设计目的获取数据(安全且幂等的读操作)提交数据(不安全的写操作)
参数位置URL 查询字符串(?key=value)请求体(Request Body)
参数可见性可见(显示在地址栏)不可见(对用户隐藏)
数据长度限制有(因URL长度限制,通常几KB)理论上无(但服务器可能会限制)
安全性较差(参数直接暴露)

相对较好(但仍需HTTPS保障)

如果网站没有使用 HTTPS 协议,POST 的数据包同样可以被网络上的抓包工具(如 Wireshark)轻松截获和查看

浏览器历史参数保留在浏览器历史中不保留
可缓存性可被缓存不可被缓存(通常)
幂等性幂等(多次执行效果相同)非幂等(多次执行可能产生不同结果)
书签可收藏为书签不可收藏
后退/刷新无害浏览器会提示可能重新提交数据
主要用途获取资源、搜索、筛选创建资源、登录、提交表单、上传文件

响应协议

响应行(以上图中红色部分)
响应数据的第一行。响应行由 协议及版本 响应状态码 状态码描
组成
协议/版本:HTTP/1.1
响应状态码:200
状态码描述:OK
响应头(以上图中黄色部分)
响应数据的第二行开始。格式为keyvalue形式
http是个无状态的协议,所以可以在请求头和响应头中设置一些信息和想要执行的动作,这
样,对方在收到信息后,就可以知道你是谁,你想干什么
响应体(以上图中绿色部分)
响应数据的最后一部分。存储响应的数据
响应体和响应头之间有一个空行隔开(作用:用于标记响应头结束)

响应体包含服务器返回的实际数据,格式由Content-Type头指定:

  • text/html - HTML文档

  • application/json - JSON数据

  • application/xml - XML数据

  • image/jpeg - JPEG图像

  • text/css - CSS样式表

  • application/javascript - JavaScript代码

HTTP 状态码分类
状态码范围类别描述
1xx信息性请求已接收,继续处理
2xx成功请求已成功接收、理解和接受
3xx重定向需要进一步操作以完成请求
4xx客户端错误请求包含语法错误或无法完成
5xx服务器错误服务器未能完成有效的请求
2xx 成功
  • 200 OK - 请求成功 这是程序员最想看到的响应码

  • 201 Created - 资源创建成功(常用于POST请求)

  • 202 Accepted - 请求已接受但尚未处理完成

  • 204 No Content - 请求成功但无内容返回

3xx 重定向
  • 301 Moved Permanently - 资源已永久移动到新位置

  • 302 Found - 资源临时移动到不同位置

  • 304 Not Modified - 资源未修改(使用缓存版本)

4xx 客户端错误
  • 400 Bad Request - 请求语法错误

  • 401 Unauthorized - 需要身份验证

  • 403 Forbidden - 服务器理解请求但拒绝执行

  • 404 Not Found - 请求的资源不存在

  • 405 Method Not Allowed - 请求方法不被允许

5xx 服务器错误
  • 500 Internal Server Error - 服务器内部错误

  • 502 Bad Gateway - 网关或代理服务器收到无效响应

  • 503 Service Unavailable - 服务暂时不可用

  • 504 Gateway Timeout - 网关或代理服务器超时

补充:

“HTTP 协议本身是无状态(Stateless) 的,即服务器不会记住上一次的请求信息。每次请求都是独立的。为了维持用户状态(如登录信息),需要通过 Cookie/Session 等技术来弥补。”

在后面我们会遇到cookie会话技术,这个问题就能迎刃而解了!

总之,HTTP 协议是 Web 通信的基石。请求协议定义了客户端如何‘问’,响应协议定义了服务器如何‘答’。理解其格式、方法、状态码和头部字段,是进行 Web 开发、接口调试和性能优化的基础。

http://www.dtcms.com/a/391254.html

相关文章:

  • 内网穿透系列十三:wstunnel 一款通过 Websocket 或 HTTP2 隧道传输的内网穿透工具
  • 【开关电源篇】自激振荡开关电源原理详解-从模块解析到故障维修
  • SpringBoot+Vue实现图片上传
  • C++ 函数指针与排序策略
  • 12分钟讲解Python核心理念
  • 01数据结构-串和KMP算法
  • 前端性能优化实用方案(三):骨架屏提升30%用户感知速度
  • NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控一站式建设方案
  • window XP环境下配置VC6.0的Win32汇编语言开发环境
  • 【算法】0_算法工程师常见算法题
  • 免费插件分享 | BaseTool
  • sk04.【scikit-learn基础】--『监督学习』之 线性回归
  • Ubuntu终端切换WiFi
  • eBest渠道商管理软件:快消品渠道数字化的“破局利器”
  • 基于protues的电子时钟仿真与模拟
  • FastProperty 高效的属性读写设置
  • 【开题答辩全过程】以 基于Java的失物招领平台为例,包含答辩的问题和答案
  • 【7/20】前后端整合:Vue.js 调用 Express API,操作 MongoDB 数据,实现用户管理系统
  • 【8/20】用户认证基础:JWT 在 Express 中的实现,实现安全登录
  • 独立站有哪些建站工具
  • Linux 终端常用快捷键整理
  • 跨域的两种解决方法
  • 小程序中获取年月日时分的组件
  • Redis热升级秘籍:零停机迁移方案与工具链
  • 时序数据库选型指南深度解析IoTDB架构设计与性能对比
  • springboot超市管理系统的设计与实现(代码+数据库+LW)
  • 让Trae写一个AI的api中继服务
  • 跨国制造业SD-WAN:延迟下降78%,运维成本下降53%
  • MySQL服务启动不成功的可能解决方法
  • 硬解码出现画面回退分析