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

一篇梳理清楚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.1HTTP/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)

请求体用于发送数据给服务器。在POSTPUT等请求方法中,数据通常通过请求体发送。常见的数据格式有:

  • 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请求常用的两种方法是:

  1. XMLHttpRequest
  2. 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请求是前后端通信的基础,掌握其基本结构和请求方式非常重要。通过GETPOSTPUTDELETE等方法可以实现不同的功能,而请求头和请求体提供了更多的配置和数据传输方式。掌握这些基本的请求机制后,可以更好地处理客户端与服务器之间的数据交互。

相关文章:

一篇梳理清楚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

导致这个问题的原因有很多的&#xff0c;这里讲到的只是原因之一 原因 taglib不认识forEach 解决办法 添加<% taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c" %> &#xff08;我忘写这个东西了哈哈哈&#xff09;...

【ArcGIS Pro微课1000例】0063:处理无人机数据(空三、生成DOM、DSM、DTM)

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

【pytorch】深度学习计算

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

详解磁盘IO、网络IO、零拷贝IO、BIO、NIO、AIO、IO多路复用(select、poll、epoll)

1、什么是I/O 在计算机操作系统中&#xff0c;所谓的I/O就是输入&#xff08;Input&#xff09;和输出&#xff08;Output&#xff09;&#xff0c;也可以理解为读&#xff08;Read&#xff09;和写&#xff08;Write)&#xff0c;针对不同的对象&#xff0c;I/O模式可以划分为…...

VPN技术-GRE隧道的配置

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

【spring-cloud-gateway总结】

文章目录 什么是gateway如何导入gateway依赖路由配置gateway配置断路器导包配置 什么是gateway 在微服务架构中&#xff0c;gateway网关是一个服务&#xff0c;它作为系统的唯一入口点&#xff0c;处理所有的客户端请求&#xff0c;然后将这些请求路由到适当的服务。提供了几个…...

数组相关简单算法

目录 1. 数据结构与算法 2. 数组中涉及的算法 2.1 2.2 数值型数组相关运算 2.3 数组赋值 2.4 数组复制/反转 2.5 数组查找 2.6 排序 1. 数据结构与算法 《数据结构与算法》是大学些许专业的必修或选修课&#xff0c;主要包含两方面知识&#xff1a; &#xff08;1&#…...

在VBA中结合正则表达式和查找功能给文档添加交叉连接

在VBA中搜索文本有两种方式可用&#xff0c;一种是利用Range.Find对象&#xff08;更常见的形式可能是Selection.Find&#xff0c;Selection是Range的子类&#xff0c;Selection.Find其实就是特殊的Range.Find&#xff09;&#xff0c;另一种方法是利用正则表达式&#xff0c;但…...

动手学深度学习-多层感知机-7前向传播、反向传播和计算图

目录 前向传播 前向传播计算图 反向传播 训练神经网络 小结 我们已经学习了如何用小批量随机梯度下降训练模型。 然而当实现该算法时&#xff0c;我们只考虑了通过前向传播&#xff08;forward propagation&#xff09;所涉及的计算。 在计算梯度时&#xff0c;我们只调用…...

【Python】基于Python的CI/CD工具链:实现自动化构建与发布

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代软件开发中,持续集成(CI)和持续交付(CD)已经成为提高开发效率和软件质量的重要实践。CI/CD流程帮助开发团队自动化构建、测试、…...

FPGA-PS端编程1:

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

自制数据库迁移工具-C版-06-HappySunshineV1.5-(支持南大Gbase8a、PostgreSQL、达梦DM)

目录 一、环境信息 二、简述 三、架构图 四、升级点 五、支持功能 六、后续计划支持功能 七、安装包下载地址 八、配置参数介绍 九、安装步骤 1、用户创建 2、安装包解压 3、环境变量配置 4、环境变量生效 5、动态库链接检验 &#xff08;1&#xff09;HsManage…...

了解RPC

本文来自智谱清言 --------- RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种允许程序调用位于远程计算机上的子程序或服务的技术。这种技术使得构建分布式计算变得更加容易&#xff0c;因为它提供了强大的远程调用能力&#xff0c;同时保持…...

centos7 安装docker

文章目录 介绍docker特点安装1.前提准备2.下载1.移除旧版docker命令2.切换centos7的镜像源3.配置docker yum源4.安装最新docker5.输入命令验证docker 安装是否成功6.配置docker 镜像加速7.设置为开机自启 总结 介绍 ‌Docker‌是一种开源的容器化平台&#xff0c;旨在简化应用…...

Docker 入门:如何使用 Docker 容器化 AI 项目(一)

引言 在人工智能&#xff08;AI&#xff09;项目的开发和部署过程中&#xff0c;环境配置和依赖管理往往是开发者遇到的挑战之一。开发者通常需要在不同的机器上运行同样的代码&#xff0c;确保每个人使用的环境一致&#xff0c;才能避免 “在我的机器上可以运行”的尴尬问题。…...

LLMs之rStar:《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读

LLMs之rStar&#xff1a;《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读 导读&#xff1a;这篇论文提出了一种名为rStar的自我博弈互推理方法&#xff0c;用于增强小型语言模型 (SLMs) 的推理能力&#xff0c;无需微调或依赖更强大的模型。rStar…...

【RK3588 Linux 5.x 内核编程】-内核中断与ThreadedIRQ

内核中断与ThreadedIRQ 文章目录 内核中断与ThreadedIRQ1、Threaded IRQ介绍2、Threaded IRQ相关API3、驱动实现4、驱动验证当 Interrupt 触发时,Interrupt handler 应该执行得非常快,它不应该运行更多的时间(它不应该执行耗时的任务)。 如果我们有执行更多任务的中断处理程…...

Message Processing With Spring Integration高级应用:自定义消息通道与端点

一、Spring Integration 简介 Spring Integration 是 Spring 框架的扩展&#xff0c;支持企业集成模式&#xff08;EIP&#xff09;&#xff0c;提供轻量级的消息处理功能&#xff0c;帮助开发者构建可维护、可测试的企业集成解决方案。 核心目标&#xff1a; 提供简单的模型…...

S32K324 MCAL中的Postbuild和PreCompile使用

文章目录 前言Postbuild和PreCompile的概念MCAL中配置差异总结 前言 之前一直看到MCAL配置中有这个Postbuild和PreCompile的配置&#xff0c;但是不太清楚这两个的区别和使用方法。最近在使用中出现了相关问题&#xff0c;本文介绍一下MCAL中这两种配置的区别和使用。 Postbu…...

kubeadm_k8s_v1.31高可用部署教程

kubeadm_k8s_v1.31高可用部署教程 实验环境部署拓扑图**部署署架构****Load Balance****Control plane node****Worker node****资源分配&#xff08;8台虚拟机&#xff09;**集群列表 前置准备关闭swap开启ipv4转发更多设置 1、Verify the MAC address and product_uuid are u…...

【AI日记】24.12.22 容忍与自由 | 环境因素和个人因素

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容&#xff1a;看 OpenAi 这周的发布会和其他 AI 新闻&#xff0c;大佬视频时间&#xff1a;3 小时 读书 书名&#xff1a;富兰克林自传时间&#xff1a;1 小时评估&#xff1a;读完&#xff0c;总体…...

【Java基础面试题030】Java和Go的区别?

回答重点 可以从语言的设计理念、并发模型、内存管理、生态系统与应用场景来说&#xff1a; 1&#xff09;语言设计理念&#xff1a; Java&#xff1a;Java是一种面向对象编程语言&#xff0c;强调继承、多态和封装等OOP特性。它运行在Java虚拟机&#xff08;JVM&#xff09…...

学习嵩山版《Java 开发手册》:编程规约 - 常量定义(P5)

概述 《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结&#xff0c;他旨在提升开发效率和代码质量 《Java 开发手册》是一本极具价值的 Java 开发规范指南&#xff0c;对于提升开发者的综合素质和代码质量具有重要意义 学习《Java 开发手册》是一个提升 Jav…...