HTTP协议讲解

概念: Hyper Text Transfer Protocol 超文本传输协议,规定了浏览器和服务器之间的数据传输规则
在这里插入图片描述
特点

  • 基于TCP协议,面向连接,安全
  • 基于请求-响应模型的,一次请求对应一次响应
  • 无状态的,对于事物没有记忆能力,每次请求-响应都是独立的
    • 缺点:多次请求间不能共享数据
    • 优点: 响应速度快

请求协议
常见请求字段

在这里插入图片描述

  • Get方式:请求参数在请求行中,没有请求体,请求大小在浏览器中是有限制的。
  • Post方式:请求参数在请求体中,请求大小没有限制。

请求数据获取

  • web服务器(Tomcat)对http协议的请求数据进行了解析,并进行了封装(HttpServeletRequest),在调用controller方法的时候自动传递给了该方法,因此我们不必直接对原始协议进行操作。

在这里插入图片描述
代码示例:

package com.huohuo;import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class RequestController {@RequestMapping(value = "/request")public String request(HttpServletRequest request) {// 获取请求方式String method = request.getMethod();// 获取请求路径String requestURL = request.getRequestURL().toString();String requestURI = request.getRequestURI(); // 是资源访问路径// 获取请求协议String protocol = request.getProtocol();// 获取请求参数 - name, ageString name = request.getParameter("name");String age = request.getParameter("age");// 获取请求头 - AcceptString accept = request.getHeader("Accept");return "OK<br/>" +"method:" + method + "<br/>" +"requestURL:" + requestURL + "<br/>" +"requestURI:" + requestURI + "<br/>" +"protocol:" + protocol + "<br/>" +"name:" + name + "<br/>" +"age:" + age + "<br/>" +"accept:" + accept + "<br/>";}
}

启动后访问localhost:8080/request?name=huohuo&age=18

在这里插入图片描述
响应协议
以下是常见的响应状态码:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
web服务器对http协议的响应数据进行了封装(HttpServeletResponse),并在调用Controller方法的时候传递了该方法,这就使得程序员不必对协议直接进行操作,让web开发更加便捷。

使用response或spring对象进行响应

    @RequestMapping("/response")// 第一种方式,响应体是字符串,会自动设置响应头 Content-Type: text/plain;charset=UTF-8public void Response(HttpServletResponse response) throws IOException {// 设置响应状态码response.setStatus(HttpServletResponse.SC_OK); // 200// 设置响应头response.setHeader("name", "huohuo");// 设置响应体// 会抛出 IOException, 因为 response.getWriter() 获取的流,是和 response 关联的,response.getWriter().write("<h1> hello response </h1>");}
// 使用spring中提供的方式,封装对象返回
@RequestMapping("/response2")
// 这是第二种方式,返回 ResponseEntity 对象,会自动设置响应头 Content-Type: text/plain;charset=UTF-8,也可以手动设置
public ResponseEntity<String> response2(HttpServletRequest request) {return ResponseEntity.status(200).header("name2", "huohuo2").body("<h1> hello response2 </h1>");
}

注:响应头和响应状态码如果没有特殊要求的话,通常不手动设定,服务器会根据请求处理的逻辑自动设置状态码和头

致谢:本文参考黑马程序员的视频。
https://www.bilibili.com/video/BV1yGydYEE3H/?vd_source=1b8f9bfb1d0891faf1c70d7678ae56db

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/74109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全国节能宣传周线上知识竞赛

线上知识竞赛|节能降碳知识知多少 引言 全国节能宣传周举办的主题是“绿色低碳&#xff0c;节能先行”。国家节能中心会同相关单位共同打造了一款线上知识竞赛小程序&#xff0c;学习节能知识&#xff0c;争做节能达人。 1.小程序规则&#xff1a; 体力规则&#xff1a;每位…

【区块链安全 | 第十八篇】类型之引用类型(二)

文章目录 引用类型数组切片结构体 引用类型 数组切片 数组切片是对数组中连续部分的一个视图。它的语法为 x[start:end]&#xff0c;其中 start 和 end 是表达式&#xff0c;结果类型为 uint256&#xff08;或者可以隐式转换为 uint256&#xff09;。切片的第一个元素是 x[st…

GitHub上免费学习工具的精选汇总

以下是GitHub上免费学习工具的精选汇总&#xff0c;涵盖编程语言、开发框架、数据科学、面试准备等多个方向&#xff0c;结合工具的功能特点、社区活跃度及适用场景进行分类推荐&#xff1a; 一、编程语言与开发框架 Web Developer Roadmap 简介&#xff1a;为开发者提供全栈学…

[leetcode]2685. 统计完全连通分量的数量

题目链接 题意 给定无向图&#xff0c;求完全连通分量 连通分量就是一个连通块的意思 完全连通分量&#xff1a;就是一个连通块中 &#xff0c;所有点之间都两两有边相连 思路 一个完全联通分量有n个点 那么应该有 C n 2 C_n^2 Cn2​条边 并查集维护连通块 检查每个联通分量…

使用LangChain Agents构建Gradio及Gradio Tools(3)——使用Langchain agents构建Gradio UI

使用LangChain Agents构建Gradio及Gradio Tools(3)——使用Langchain agents构建Gradio UI 本篇摘要16. 使用LangChain Agents构建Gradio及Gradio Tool16.3 使用Langchain agents构建Gradio UI16.3.1 创建代理16.3.2 创建Gradio UI16.3.3 运行demo参考文献本章目录如下: 《使…

项目实战 - 用户列表

用户列表想要实现这样的效果&#xff1a; 渲染数据&#xff1a; import React,{useState,useEffect} from react; import { Button,Table, Tag,Modal,Popover, Switch } from antd; import { EditOutlined,DeleteOutlined,ExclamationCircleOutlined } from ant-design/icons…

吾爱破解安卓逆向学习笔记(4p)

学习目标&#xff0c;了解安卓四大组件&#xff0c;activity生命周期&#xff0c;同时了解去除部分广告和更新提示。 广告类型 1.启动页广告 2.更新广告 3.横幅广告 安卓四大组件 组件描述Activity(活动)在应用中的一个Activity可以用来表示一个界面&#xff0c;意思可以…

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解前言YOLOV1的模型结构YOLOV1模型的基本执行流程YOLOV1模型的网络参数YOLOV1模型的训练方式 YOLOV1的核心思想前向传播阶段网格单元(grid cell)…

Vue项目中Vuex在util引入,断点存在default

示例代码 // src/store/index.js import Vue from vue; import Vuex from vuex; ……Vue.use(Vuex); export default new Vuex.Store({…… })// src/utils/index.js import store from /store // 导入默认导出的 store export async function getDict() {store.state.userInf…

FALL靶机渗透实战:从信息收集到特权升级的完整链分析

1.下载靶机&#xff0c;并在虚拟机中打开 2.用kali来确定该靶机的IP kali的IP&#xff1a;192.168.139.152 arp-scan -l 3.扫描端口 nmap -O 192.168.139.172 4.扫目录 gobuster dir -u http://192.168.139.172 -x php,txt,html -w /usr/share/dirbuster/wordlists/directo…

谈谈常见的数据结构(如数组、链表、栈、队列、哈希表、树、图)及其应用场景

一、数组&#xff08;Array&#xff09; 定义&#xff1a;连续存储相同类型数据的线性结构&#xff0c;支持随机访问。 应用场景&#xff1a;列表渲染、数据缓存、算法处理 代码示例&#xff1a; // 数组基本操作 const arr [1, 2, 3, 4]; arr.push(5); // O(1) 平均时间复杂…

Kafka 的高可用性

Kafka 的高可用性主要通过副本机制、ISR&#xff08;In-Sync Replicas&#xff09;列表和控制器 Broker 来实现。这些机制共同确保了 Kafka 集群在部分节点故障时仍然可以正常运行&#xff0c;数据不会丢失&#xff0c;并且服务不会中断。 1. 副本机制 Kafka 的副本机制是其高…

力扣HOT100之矩阵:54. 螺旋矩阵

这道题之前在代码随想录里刷过类似的&#xff0c;还有印象&#xff0c;我就按照当初代码随想录的思路做了一下&#xff0c;结果怎么都做不对&#xff0c;因为按照代码随想录的边界条件设置&#xff0c;当行数和列数都为奇数时&#xff0c;最后一个元素无法被添加到数组中&#…

快速构建个人本地知识库管理系统与实现RAG问答

文章目录 摘要一、RAG 和知识库简介1、RAG2、知识库 二、 工作流程三、系统架构设计文件结构知识库构建模块RAG 模块用户交互模块 四、技术实现细节五、系统使用案例结论未来改进方向致谢 摘要 在当今信息爆炸的时代&#xff0c;快速准确地获取知识变得尤为重要。本地 RAG&…

使用DeepSeek API进行情感分析:超简单

文章目录 1. 引言1.1 情感分析概述1.2 为什么选择DeepSeek API1.3 本文目标 2. 技术方案对比2.1 传统情感分析方法2.2 基于LLM的方法DeepSeek API优势 3. DeepSeek 情感分析实战3.1 Few-shot Learning方法3.2 完整的DeepSeek API调用示例3.3 案例演示 4. DeepSeek开发情感分析工…

设置网站主题色color-scheme

color-scheme color-scheme CSS 属性允许元素指示它可以舒适地呈现哪些颜色方案。 操作系统颜色方案的常见选择为“亮色”和“暗色”&#xff0c;或“日间模式”和“夜间模式”。当用户选择其中一种颜色方案时&#xff0c;操作系统会对用户界面进行调整&#xff0c;包括表单控件…

Muduo网络库实现 [三] - Socket模块

目录 设计思路 类的设计 模块的实现 基础模块 特殊模块 集成模块 主函数 主函数实现 主函数测试 疑惑点 设计思路 Socket模块主要是对套接字的基础操作进行封装&#xff0c;简化我们对套接字的操作&#xff0c;不需要调用C的原生接口&#xff0c;而是以面向对象的…

优选算法的巧思之径:模拟专题

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 目录 一、模拟 二、例题讲解 2.1. 替换所有的问号 2.2. 提莫攻击 2.3. Z字形变换 2.4. 外观数列 2.5. 数青蛙 一、模拟 模拟算法说简单点就是照葫芦画瓢&#xff0c;现在草稿纸上模拟一遍算法过程&#xf…

贪心算法(13)(java)合并区间

题目&#xff1a; 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff…

A股复权计算_权息数据整理

目录 前置&#xff1a; 步骤&#xff1a; 1 以通达信为参照 2 从优矿获取所需数据 2.1 股票配股信息 2.2 股票分红信息 2.3 股票拆股信息 3 合并数据&#xff0c;制成权息数据表 权息数据截止20250329.7z 视频 前置&#xff1a; 1 本系列将以 “A股复权计算_” 开头…