【学习】HTTP

HTTP

超文本传输协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。HTTP 遵循经典的客户端—服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。

工作原理是什么?

HTTP协议基于请求-响应模型,具体步骤如下:

  1. 客户端发起请求:客户端(如浏览器)向服务器发送一个HTTP请求。
  2. 服务器处理请求:服务器接收到请求后,解析请求并处理。
  3. 服务器返回响应:服务器生成一个HTTP响应并将其发送回客户端。
  4. 客户端处理响应:客户端接收到响应后,解析响应并处理(如渲染HTML页面)。

HTTP请求和响应的结构是什么?

HTTP请求

一个HTTP请求由以下几个部分组成:

  1. 请求行(Request Line)
  2. 请求头(Request Headers)
  3. 空行(Blank Line)
  4. 请求体(Request Body,可选)
请求行(Request Line)

请求行包含三个部分,分别是请求方法、请求的URL和HTTP版本。
格式:

<请求方法> <请求URL> <HTTP版本>

示例:

GET /index.html HTTP/1.1
  • 请求方法:常见的请求方法有GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH等。
  • 请求URL:请求的资源路径。
  • HTTP版本:通常为HTTP/1.1。
请求头(Request Headers)

请求头包含一系列键值对,提供关于请求的附加信息。每个头字段由名称和值组成,中间用冒号分隔。
示例:

Host: www.example.com
Accept: text/html,application/xhtml+xml
User-Agent: Mozilla/5.0

常见的请求头字段包括:

  • Host:请求的目标主机名和端口号。
  • Accept:客户端可以接受的内容类型。
  • User-Agent:客户端的用户代理信息,如浏览器类型和版本。
  • Content-Type:请求体的媒体类型,如application/json。
  • Content-Length:请求体的长度(字节数)。
  • Authorization:用于身份验证的凭证。
空行(Blank Line)

请求头和请求体之间有一个空行,表示请求头部分结束。

请求体(Request Body,可选)

请求体包含客户端发送给服务器的数据,如表单数据、JSON对象等。对于GET请求,请求体通常是空的;而对于POST、PUT等方法,请求体可能包含数据。
示例:

name=John&age=30
HTTP响应

一个HTTP响应由以下几个部分组成:

  1. 状态行(Status Line)
  2. 响应头(Response Headers)
  3. 空行(Blank Line)
  4. 响应体(Response Body,可选)
状态行(Status Line)

状态行包含三个部分,分别是HTTP版本、状态码和状态消息。
格式:

<HTTP版本> <状态码> <状态消息>

示例:

HTTP/1.1 200 OK
  • HTTP版本:通常为HTTP/1.1。
  • 状态码:一个三位数字,表示请求的处理结果。
  • 状态消息:状态码的简短描述,如OK、Not Found等。
响应头(Response Headers)

响应头包含一系列键值对,提供关于响应的附加信息。每个头字段由名称和值组成,中间用冒号分隔。

Content-Type: text/html
Content-Length: 1354

常见的响应头字段包括:

  • Content-Type:响应体的媒体类型,如text/html。
  • Content-Length:响应体的长度(字节数)。
  • Set-Cookie:设置客户端的Cookie。
  • Location:用于重定向,指定新的URL。
  • Cache-Control:控制缓存的行为,如max-age、no-cache等。
空行(Blank Line)

响应头和响应体之间有一个空行,表示响应头部分结束。

响应体(Response Body,可选)

响应体包含服务器返回给客户端的数据,如HTML文档、图片等。对于某些状态码(如204 No Content),响应体可能是空的。

HTTP方法(GET, POST, PUT, DELETE等)的用途是什么?

HTTP方法定义了客户端与服务器之间交互的不同方式。每个方法都有特定的用途和语义。

GET

用途
请求指定的资源。GET方法用于从服务器获取数据。
特点

  • 幂等性:多次相同的GET请求应该返回相同的结果。
  • 安全:GET请求不应该有副作用,即不应该改变服务器上的资源状态。
  • 缓存:GET请求可以被缓存。
  • 参数:参数通过URL传递,限制了参数的长度。
POST

用途
向指定的资源提交数据,通常用于提交表单或上传文件。
特点

  • 非幂等性:多次相同的POST请求可能会产生不同的结果。
  • 不安全:POST请求可能会改变服务器上的资源状态。
  • 无缓存:POST请求不会被缓存。
  • 参数:参数通过请求体传递,没有长度限制。
PUT

用途
替换指定资源的所有当前表示。PUT方法用于更新资源。
特点

  • 幂等性:多次相同的PUT请求应该产生相同的结果。
  • 不安全:PUT请求可能会改变服务器上的资源状态。
  • 无缓存:PUT请求不会被缓存。
  • 参数:参数通过请求体传递。
DELETE

用途
删除指定的资源。
特点

  • 幂等性:多次相同的DELETE请求应该产生相同的结果。
  • 不安全:DELETE请求可能会改变服务器上的资源状态。
  • 无缓存:DELETE请求不会被缓存。
HEAD

用途
请求指定资源的响应头部,但不返回响应体。HEAD方法用于获取资源的元数据。
特点

  • 幂等性:多次相同的HEAD请求应该返回相同的结果。
  • 安全:HEAD请求不应该有副作用。
  • 缓存:HEAD请求可以被缓存。
OPTIONS

用途
请求指定资源的通信选项。OPTIONS方法用于获取目标资源所支持的通信选项。
特点

  • 幂等性:多次相同的OPTIONS请求应该返回相同的结果。
  • 安全:OPTIONS请求不应该有副作用。
  • 缓存:OPTIONS请求可以被缓存。
PATCH

用途
对指定资源进行部分更新。PATCH方法用于修改资源的部分属性。
特点

  • 非幂等性:多次相同的PATCH请求可能会产生不同的结果。
  • 不安全:PATCH请求可能会改变服务器上的资源状态。
  • 无缓存:PATCH请求不会被缓存。
  • 参数:参数通过请求体传递。
幂等

如果同样的请求被执行一次与连续执行多次,对服务器的预期影响是相同的,那么称这个 HTTP 方法是幂等的。

HTTP状态码的分类和常见状态码有哪些?

HTTP状态码是服务器在响应客户端请求时返回的一个数字代码,用于指示请求的处理结果。

HTTP状态码的分类
  1. 信息响应 (100–199)
  2. 成功响应 (200–299)
  3. 重定向消息 (300–399)
  4. 客户端错误响应 (400–499)
  5. 服务端错误响应 (500–599)
常见状态码
状态码描述说明
100Continue继续发送请求体
101Switching Protocols切换协议
200OK请求成功
201Created资源已创建
202Accepted请求已接受,但未处理完成
204No Content请求成功,但响应体为空
301Moved Permanently资源已永久移动
302Found资源临时移动
304Not Modified资源未修改
307Temporary Redirect临时重定向
308Permanent Redirect永久重定向
400Bad Request请求无效
401Unauthorized需要身份认证
403Forbidden禁止访问
404Not Found资源未找到
405Method Not Allowed方法不被允许
408Request Timeout请求超时
429Too Many Requests请求过多
500Internal Server Error服务器内部错误
501Not Implemented不支持的请求方法
502Bad Gateway无效的响应
503Service Unavailable服务不可用
504Gateway Timeout上游服务器超时

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

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

相关文章

Visual Studio Code 端口转发功能详解

Visual Studio Code 端口转发功能详解 引言 Visual Studio Code&#xff08;简称 VS Code&#xff09;是一个功能强大的源代码编辑器&#xff0c;它支持多种编程语言的语法高亮、智能代码补全、自定义快捷键、代码重构等特性。除了这些基本功能外&#xff0c;VS Code 还提供了…

31-Shard Allocation Awareness(机架感知)

同一机器上&#xff0c;部署多个es节点&#xff0c;防止副本和主分片分配到同一机器上 例如&#xff1a;es节点a、b、c部署在01机器上&#xff0c;节点d、e、f部署在02机器上 es2.4版本配置 a、b、c节点yaml配置&#xff1a;node.rack: aaa d、e、f节点yaml配置&#xff1a…

机器学习【激活函数】

笔记内容侵权联系删 激活函数的概念神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值&#xff0c;并将输入值传递给下一层&#xff0c;输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中&#xff0c;上层节点的输入在加…

内网、公网(外网)划分

内网、公网&#xff08;外网&#xff09;划分 声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其…

前端神经网络入门(二):如何利用 WebGPU 进行数值计算,实现大规模数据的计算加速?- 边读边按下F12跑代码吧

在 Web 应用开发中&#xff0c;JavaScript 是前端开发者们最常用的语言。然而&#xff0c;当面对大规模数据处理和计算任务时&#xff0c;JavaScript 在浏览器中的执行往往会受到诸多性能瓶颈的限制。幸运的是&#xff0c;WebGPU 的出现&#xff0c;为我们提供了在前端实现高性…

新手教学系列——善用 VSCode 工作区,让开发更高效

引言 作为一名开发者,你是否曾经在项目中频繁地切换不同文件夹,打开无数个 VSCode 窗口?特别是当你同时参与多个项目或者处理多个模块时,这种情况更是家常便饭。很快,你的任务栏上挤满了 VSCode 的小图标,切换起来手忙脚乱,工作效率直线下降。这时候,你可能会问:“有…

Oracle故障处理:ora-12514 与 ora-28547

目录 项目场景 问题分析 问题总结 项目场景 现场同事求助说&#xff1a;有个刚刚部署在Windows上的Oracle11gR2数据库&#xff08;单机单实例&#xff09;&#xff0c;使用PLSQL工具连接不上。帮忙查看后&#xff0c;发现未装Oracle client&#xff0c;指导其安装完Oracle客…

Kafka基础知识学习

Kafka概念 一、核心组件对照表 组件定义主要功能特点BrokerKafka集群中的服务器节点存储消息、处理请求、管理分区唯一ID&#xff0c;可能成为ControllerTopic消息的逻辑分类单元消息分类、存储组织包含多个Partition&#xff0c;类似数据库表PartitionTopic的物理分片并行处…

【miniMax开放平台-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

PC上浏览器是如何查询DNS 缓存的呢?

通过 ipconfig /displaydns 的显示结果可以获取本机的 DNS 缓存信息&#xff0c;那么浏览器是如何获取本机的 DNS 缓存。 答案是&#xff1a;浏览器获取本机的 DNS 缓存主要是通过操作系统提供的接口来获取&#xff0c;。 具体的获取途径如下&#xff1a; 先查询自身缓存&am…

26-ES集群搭建、身份认证配置

虚机搭建 添加es用户 elasticsearch 默认不允许root用户启动&#xff0c;所以需要创建es用户 useradd elasticsearch passwd elasticsearch 解压安装包 #解压es tar -xvzf elasticsearch-7.14.2-linux-x86_64.tar.gz 将文件夹赋予es用户权限 #将文件夹赋予es用户权限 sud…

BuyPass SSL证书:申请免费可用多域名SSL证书6个月180天

目录 一、前沿 二、条件 三、申请流程 四、注意事项 五、总结 一、前沿 找到一个6个月180天的免费证书&#xff0c;目前 BuyPass 提供了类似ZerSSL 等基于 ACME/Certbot 的证书自动签发服务 - BuyPass GO Free SSL&#xff0c;完全免费&#xff0c;只支持单域名、多域名&am…

OpenHarmony的公共事件

OpenHarmony的公共事件 公共事件简介 CES&#xff08;Common Event Service&#xff0c;公共事件服务&#xff09;为应用程序提供订阅、发布、退订公共事件的能力。 公共事件分类 公共事件从系统角度可分为&#xff1a;系统公共事件和自定义公共事件。 系统公共事件&#…

【AlphaFold3】开源本地的安装及使用

文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…

npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)

您提供的命令 npm list -g --depth0 是在 Node Package Manager (npm) 的上下文中使用的&#xff0c;用来列出全局安装的所有 npm 软件包而不显示它们的依赖项。 这是它的运作方式&#xff1a; npm list -g --depth0-g: 指定列表应包括全局安装的软件包。--depth0: 限制树形结…

React状态管理之Redux

React状态管理之Redux 在React应用中&#xff0c;状态管理是一个至关重要的概念。随着应用规模的扩大&#xff0c;组件之间的状态共享和更新变得愈发复杂。Redux作为一个专门用于JavaScript应用&#xff08;尤其是React应用&#xff09;的状态管理库&#xff0c;提供了一种可预…

Spring Boot框架:电商系统的技术革新

4 系统设计 网上商城系统的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没有经过全…

layui.all.js:2 Uncaught Error: Syntax error, unrecognized expression

报错内容&#xff1a; layui.all.js:2 Uncaught Error: Syntax error, unrecognized expression: input[name"image1UploadTime"language] 错误代码&#xff1a; $(input[name"imagejUploadTime"language]).val(currentDateTime); 因为 language 是个变…

Scala的set

//Set的特点&#xff1a;唯一&#xff08;元素不相同&#xff09;&#xff1b;无序 case class Book(var bookName:String,var author:String,var price:Double){} object test27 {def main(args: Array[String]): Unit {//定义一个可变setval set1 scala.collection.mutable…

【数据分享】中国对外投资合作发展报告(2013-2023)

数据介绍 绪 论............................................................................................................................. 1 对外投资合作高质量发展迈出新步伐................................................................... 2 第一篇 发…