一篇梳理清楚http请求知识点
HTTP请求是Web开发中的重要组成部分,它涉及到客户端和服务器之间的通信。掌握HTTP请求的知识点对于前端开发和后端开发都至关重要。以下是关于HTTP请求的详细梳理,结合代码进行说明。
1. HTTP请求概述
HTTP(超文本传输协议)是一个客户端(通常是浏览器)与服务器之间的通信协议。它定义了请求和响应的格式,支持各种类型的操作,如获取网页内容、提交表单数据、获取资源等。
HTTP请求由以下几个部分组成:
- 请求行(Request Line)
- 请求头(Request Headers)
- 请求体(Request Body)
2. 请求行(Request Line)
请求行包含三部分内容:
- 请求方法(GET, POST, PUT, DELETE等)
- 请求目标(通常是URL)
- HTTP版本(通常是
HTTP/1.1
或HTTP/2
)
例如:
GET /index.html HTTP/1.1
表示客户端通过GET
方法请求服务器上的/index.html
资源,使用HTTP/1.1
协议。
3. 常见的HTTP请求方法
GET
GET请求用于获取数据,通常用于浏览器访问网页时。GET请求的参数会附加在URL后面,通过?
进行分隔。例如:
fetch('https://api.example.com/data?id=123&name=abc').then(response => response.json()).then(data => console.log(data));
GET请求的特性:
- 无请求体(数据通过URL传递)
- 请求内容可以被缓存
- 长度有限制(URL的长度通常不超过2048个字符)
POST
POST请求用于向服务器发送数据,通常用于提交表单或上传文件。POST请求的数据通过请求体传递。例如:
fetch('https://api.example.com/data', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ id: 123, name: 'abc' })
}).then(response => response.json()).then(data => console.log(data));
POST请求的特性:
- 请求体用于传递数据
- 数据量较大,适合提交复杂的表单或上传文件
- 不会将数据暴露在URL中
PUT
PUT请求通常用于更新资源。与POST不同,PUT请求是幂等的,意味着多次执行相同的PUT请求结果是一样的。例如:
fetch('https://api.example.com/data/123', {method: 'PUT',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ id: 123, name: 'updated' })
}).then(response => response.json()).then(data => console.log(data));
PUT请求的特性:
- 请求体包含更新后的资源数据
- 一般用于更新现有资源
DELETE
DELETE请求用于删除服务器上的资源。例如:
fetch('https://api.example.com/data/123', {method: 'DELETE'
}).then(response => response.json()).then(data => console.log(data));
DELETE请求的特性:
- 用于删除资源
- 请求体通常为空
4. 请求头(Request Headers)
请求头包含关于客户端环境和请求的额外信息。常见的请求头字段有:
Content-Type
:指定请求体数据的类型(如application/json
,application/x-www-form-urlencoded
等)Authorization
:用于携带身份验证信息Accept
:客户端希望接受的响应内容类型(如text/html
,application/json
等)User-Agent
:客户端的浏览器或应用程序信息
例如,发送一个包含JSON数据的POST请求时:
fetch('https://api.example.com/data', {method: 'POST',headers: {'Content-Type': 'application/json','Authorization': 'Bearer token_here'},body: JSON.stringify({ id: 123, name: 'abc' })
}).then(response => response.json()).then(data => console.log(data));
5. 请求体(Request Body)
请求体用于发送数据给服务器。在POST
、PUT
等请求方法中,数据通常通过请求体发送。常见的数据格式有:
- JSON:
application/json
- 表单数据:
application/x-www-form-urlencoded
- 文件上传:
multipart/form-data
6. HTTP响应
HTTP响应包含以下几个部分:
- 状态行(Status Line):包含响应的状态码和状态消息。
- 响应头(Response Headers):包含服务器和响应的相关信息。
- 响应体(Response Body):包含返回的数据内容。
例如,服务器响应的状态行可能是:
HTTP/1.1 200 OK
表示请求成功,返回了200状态码。
7. HTTP状态码
状态码用于表示服务器对请求的处理结果。常见的状态码包括:
200 OK
:请求成功201 Created
:请求成功,并创建了新的资源400 Bad Request
:请求无效,可能是参数错误401 Unauthorized
:身份验证失败404 Not Found
:请求的资源不存在500 Internal Server Error
:服务器发生错误
8. 使用JavaScript发送HTTP请求
在现代浏览器中,发送HTTP请求常用的两种方法是:
XMLHttpRequest
fetch API
1. 使用XMLHttpRequest
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);
xhr.setRequestHeader('Accept', 'application/json');
xhr.onload = function () {if (xhr.status === 200) {console.log(JSON.parse(xhr.responseText));}
};
xhr.send();
2. 使用fetch API
fetch
是现代浏览器支持的API,它比XMLHttpRequest
更简洁,支持Promise,使得处理异步请求更加方便。
fetch('https://api.example.com/data').then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Error:', error));
9. 跨域请求(CORS)
跨域请求(Cross-Origin Resource Sharing,CORS)是指在浏览器中,前端页面尝试从不同源(不同域名、端口或协议)的服务器请求资源时,浏览器会进行限制。服务器需要通过Access-Control-Allow-Origin
等响应头来允许跨域请求。
例如,允许所有源进行跨域请求:
Access-Control-Allow-Origin: *
总结
HTTP请求是前后端通信的基础,掌握其基本结构和请求方式非常重要。通过GET
、POST
、PUT
、DELETE
等方法可以实现不同的功能,而请求头和请求体提供了更多的配置和数据传输方式。掌握这些基本的请求机制后,可以更好地处理客户端与服务器之间的数据交互。
相关文章:
一篇梳理清楚http请求知识点
HTTP请求是Web开发中的重要组成部分,它涉及到客户端和服务器之间的通信。掌握HTTP请求的知识点对于前端开发和后端开发都至关重要。以下是关于HTTP请求的详细梳理,结合代码进行说明。 1. HTTP请求概述 HTTP(超文本传输协议)是一个…...

Kotlin - 协程结构化并发Structured Concurrency
前言 Kotlin的Project Lead,Roman Elizarov的一片文章https://elizarov.medium.com/structured-concurrency-722d765aa952介绍了Structured Concurrency发展的背景。相对Kotlin1.1时代,后来新增的Structured Concurrency理念,也就是我们现在所…...

新版国标GB28181设备端Android版EasyGBD支持国标GB28181-2022,支持语音对讲,支持位置上报,开源在Github
经过近3个月的迭代开发,新版本的国标GB28181设备端EasyGBD安卓Android版终于在昨天发布到Github了,最新的EasyGBD支持了国标GB28181-2022版,还支持了语音对讲、位置上报、本地录像等功能,比原有GB28181-2016版的EasyGBD更加高效、…...

豆包MarsCode测评:编程效率再提升
豆包MarsCode测评:编程效率再提升 本文正在参与豆包MarsCode AI 编程体验家活动 随着人工智能技术的发展,编程的方式也在悄然发生变化。最近,豆包推出的 AI 编程工具 MarsCode 在开发者社区引发了不小的关注。这是一款支持多种主流编程语言…...

二叉树 -- 堆(详解)
目录 1、堆的概念及结构 2、堆的实现(附代码) 2.1、向下调整算法建堆 3、堆的应用(附代码) 3.1、堆排序 3.2、TOP-K问题 1、堆的概念及结构 如果有一个关键码的集合K { k0,k1 ,k2 ,…,k(n-1) },把它的所有元素…...
【Apache Paimon】-- 11 -- Flink 消费 kakfa 写 S3 File
目录 1、项目构建 2、项目新增和修改 2.1 pom.xml 新增依赖 2.2 本地测试或者 flink on k8s 时,新增 S3FileSystemFactory.java 第一步:创建包=org.apache.flink.fs.s3hadoop 第二步:新增 java 类 S3FileSystemFactory 特别注意 (1)本地测试时需要新增以下内容 (…...
SQL MID()
SQL中的MID()函数是一个用于从指定位置开始截取字符串中指定长度的子串的函数。这个函数在数据库查询和数据处理中经常被使用,特别是在需要从较长的文本字段中提取特定信息时。 MID()函数的基本语法是:SELECT MID(column_name, start, length) FROM tab…...
jsp | servlet | spring forEach读取不了对象List
导致这个问题的原因有很多的,这里讲到的只是原因之一 原因 taglib不认识forEach 解决办法 添加<% taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c" %> (我忘写这个东西了哈哈哈)...

【ArcGIS Pro微课1000例】0063:处理无人机数据(空三、生成DOM、DSM、DTM)
使用ArcGIS Pro 正射拼接处理无人机数据流程化工具,不需要额外产品许可的支持,只需要桌面是高级版许可即可支持。ArcGIS Pro处理无人机摄影测量数据主要内容有:空三、生成DOM、DSM、DTM。 文章目录 一、创建映射项目二、提交自由空三三、添加控制点优化四、提交产品生产一、…...

【pytorch】深度学习计算
1 层和块 块由类(class)表示。它的任何子类都必须定义一个将其输入转换为输出的前向传播函数,并且必须存储任何必需的参数。注意,有些块不需要任何参数。最后,为了计算梯度,块必须具有反向传播函数。 1.1…...

详解磁盘IO、网络IO、零拷贝IO、BIO、NIO、AIO、IO多路复用(select、poll、epoll)
1、什么是I/O 在计算机操作系统中,所谓的I/O就是输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为…...

VPN技术-GRE隧道的配置
GRE隧道的配置 1, 在AR1上配置DHCP接口地址池,AR3上配置DHCP全局地址池 2, PC1获取的IP地址为10.10.10.253,PC2获取的IP地址为10.10.30.253 3,通过ip route-static将目的地址为10.10.30.253的流量引入到Tunnel #配…...

【spring-cloud-gateway总结】
文章目录 什么是gateway如何导入gateway依赖路由配置gateway配置断路器导包配置 什么是gateway 在微服务架构中,gateway网关是一个服务,它作为系统的唯一入口点,处理所有的客户端请求,然后将这些请求路由到适当的服务。提供了几个…...
数组相关简单算法
目录 1. 数据结构与算法 2. 数组中涉及的算法 2.1 2.2 数值型数组相关运算 2.3 数组赋值 2.4 数组复制/反转 2.5 数组查找 2.6 排序 1. 数据结构与算法 《数据结构与算法》是大学些许专业的必修或选修课,主要包含两方面知识: (1&#…...

在VBA中结合正则表达式和查找功能给文档添加交叉连接
在VBA中搜索文本有两种方式可用,一种是利用Range.Find对象(更常见的形式可能是Selection.Find,Selection是Range的子类,Selection.Find其实就是特殊的Range.Find),另一种方法是利用正则表达式,但…...

动手学深度学习-多层感知机-7前向传播、反向传播和计算图
目录 前向传播 前向传播计算图 反向传播 训练神经网络 小结 我们已经学习了如何用小批量随机梯度下降训练模型。 然而当实现该算法时,我们只考虑了通过前向传播(forward propagation)所涉及的计算。 在计算梯度时,我们只调用…...
【Python】基于Python的CI/CD工具链:实现自动化构建与发布
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代软件开发中,持续集成(CI)和持续交付(CD)已经成为提高开发效率和软件质量的重要实践。CI/CD流程帮助开发团队自动化构建、测试、…...

FPGA-PS端编程1:
目标 在小梅哥的zynq 7015上,完成以下目标: 读取 S1 按键的电平, 当 S1 按键为按下状态时,驱动 PS LED 以 1S 的频率闪烁(注意理解 1S 的频率闪烁和 1S的时间翻转两种描述之间的差别), 当 S1 释放后,停止…...

自制数据库迁移工具-C版-06-HappySunshineV1.5-(支持南大Gbase8a、PostgreSQL、达梦DM)
目录 一、环境信息 二、简述 三、架构图 四、升级点 五、支持功能 六、后续计划支持功能 七、安装包下载地址 八、配置参数介绍 九、安装步骤 1、用户创建 2、安装包解压 3、环境变量配置 4、环境变量生效 5、动态库链接检验 (1)HsManage…...
了解RPC
本文来自智谱清言 --------- RPC(Remote Procedure Call,远程过程调用)是一种允许程序调用位于远程计算机上的子程序或服务的技术。这种技术使得构建分布式计算变得更加容易,因为它提供了强大的远程调用能力,同时保持…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...