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

Web基础之什么是HTTP协议

 Q:什么是HTTP协议?

概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

特点:
1.基于TCP协议:面向连接,安全
2.基于请求-响应模型的:一次请求对应一次响应
3。HTTP协议是无状态(无状态的是:每一次请求都是独立的,后一次请求不会记录前一次的数据)的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
        缺点:多次请求间不能共享数据。(解决方案:会话技术)
        优点:速度快(不能共享数据所以传输速度快)

 HTTP协议-请求数据格式

如何查看数据格式?在chrome浏览器中按下F12,选择网络-全部,刷新一下之后就可以在名称栏下找到想找到的http请求。点击标头,然后点击原始数据,就可以出现下图所示结果。

请求行:请求数据第一行(请求方式、资源路径、协议)

 请求头:第二行开始,格式key:value

常见的请求头:

请求体:POST请求,存放请求参数 

1.请求体在请求头一个空行之后  ( 补充:GET方式的请求是没有请求体的。)

2.请求体一般是json格式的数据,由此我们也可以很明显的看出请求体可以传输更多的数据

为什么请求体/POST请求可以传输更多的数据?

tip:GET方式的请求:设置的参数都是在请求行的 “ ?”后面进行提供,GET请求大小在浏览器中是有限制的。(如:/brand/findAll?name=海绵宝宝&status=1)

        POST方式的请求:设置的参数则往往是在请求体一个完整的json格式的数据,POST请求大小是没有限制的。

小结:

1.Http协议中请求数据分为哪几个部分?
请求行(请求数据的第一行)
请求头(key:value)
请求体(与请求头之间隔了一个空行)

Q:在服务器端我们该如何获取传递过来的请求数据?

具体操作代码: 

@RestController
public class RequestController {

    @RequestMapping("/request")
   public String request(HttpServletRequest request){
        // 获取请求方式
        String method = request.getMethod();
        System.out.println("method:"+method);
        //获取请求路径
        String requestURI = request.getRequestURI();
        System.out.println("requestURI:"+requestURI);
        //获取请求参数
        String queryString = request.getQueryString();
        System.out.println("queryString:"+queryString);
        // 获取请求协议
        String protocol = request.getProtocol();
        System.out.println("protocol:"+protocol);
        // 获取请求头
        String header = request.getHeader("User-Agent");
        System.out.println("header:"+header);
        return "success";
   }
}

 结果:

 重点tip:

实战补充:1.alt+P AI自动生成提示代码 

                 2.// 获取请求头                                      这里想获取什么请求头,参数里就填什么

                       String header = request.getHeader("User-Agent");

                 3.StringBuffer类型的数据java不能直接输出,要再调用toString()方法。

                


http://www.kler.cn/a/487899.html

相关文章:

  • 04、Redis深入数据结构
  • Spring 项目 基于 Tomcat容器进行部署
  • Tauri教程-基础篇-第二节 Tauri的核心概念上篇
  • 2、蓝牙打印机点灯-GPIO输出控制
  • Sprint Boot教程之五十:Spring Boot JpaRepository 示例
  • DuckDB:PRAGMA语句动态配置数据库行为
  • JavaSE——网络编程
  • Python基于YOLOv8和OpenCV实现车道线和车辆检测
  • 有机物谱图信息的速查技巧有哪些?
  • 【2025最新计算机毕业设计】基于SpringBoot+Vue奶茶点单系统(高质量源码,提供文档,免费部署到本地)
  • vue3+element-plus暗黑模式切换动画圆弧过渡
  • linux nginx 安装后,发现SSL模块未安装,如何处理?
  • Mumu模拟器和Frida
  • 【读点论文】DepGraph: Towards Any Structural Pruning通用的结构化剪枝框架,处理结构化剪枝的图依赖问题
  • 20250109使用M6000显卡在Ubuntu20.04.6下跑whisper来识别中英文字幕
  • Vue 2 提取可复用 Footer 组件
  • L1G5000 XTuner 微调个人小助手认知
  • 【Vue.js 组件化】高效组件管理与自动化实践指南
  • vs2022开发.net窗体应用开发环境安装配置以及程序发布详细教程
  • STM32 : PWM 基本结构
  • [network]回顾:集线器(Hub)
  • poi-tl+kkviewfile实现生成pdf业务报告
  • 深入Android架构(从线程到AIDL)_21 IPC的Proxy-Stub设计模式03
  • 【C++】C++11(二)
  • 通过 crontab 每天定时启动一个 Java JAR 包并调用特定的 `main` 方法
  • LeetCode599 两个列表的最小索引总和