【学习】HTTP

ops/2024/11/17 18:55:02/
http://www.w3.org/2000/svg" style="display: none;">

https://developer.mozilla.org/zh-CN/docs/Web/HTTP" rel="nofollow">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方法定义了客户端与服务器之间交互的不同方式。每个方法都有特定的用途和语义。

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/GET" rel="nofollow">GET

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

  • 幂等性:多次相同的GET请求应该返回相同的结果。
  • 安全:GET请求不应该有副作用,即不应该改变服务器上的资源状态。
  • 缓存:GET请求可以被缓存。
  • 参数:参数通过URL传递,限制了参数的长度。
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/POST" rel="nofollow">POST

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

  • 非幂等性:多次相同的POST请求可能会产生不同的结果。
  • 不安全:POST请求可能会改变服务器上的资源状态。
  • 无缓存:POST请求不会被缓存。
  • 参数:参数通过请求体传递,没有长度限制。
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/PUT" rel="nofollow">PUT

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

  • 幂等性:多次相同的PUT请求应该产生相同的结果。
  • 不安全:PUT请求可能会改变服务器上的资源状态。
  • 无缓存:PUT请求不会被缓存。
  • 参数:参数通过请求体传递。
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/DELETE" rel="nofollow">DELETE

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

  • 幂等性:多次相同的DELETE请求应该产生相同的结果。
  • 不安全:DELETE请求可能会改变服务器上的资源状态。
  • 无缓存:DELETE请求不会被缓存。
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/HEAD" rel="nofollow">HEAD

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

  • 幂等性:多次相同的HEAD请求应该返回相同的结果。
  • 安全:HEAD请求不应该有副作用。
  • 缓存:HEAD请求可以被缓存。
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/OPTIONS" rel="nofollow">OPTIONS

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

  • 幂等性:多次相同的OPTIONS请求应该返回相同的结果。
  • 安全:OPTIONS请求不应该有副作用。
  • 缓存:OPTIONS请求可以被缓存。
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/PATCH" rel="nofollow">PATCH

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

  • 非幂等性:多次相同的PATCH请求可能会产生不同的结果。
  • 不安全:PATCH请求可能会改变服务器上的资源状态。
  • 无缓存:PATCH请求不会被缓存。
  • 参数:参数通过请求体传递。
https://developer.mozilla.org/zh-CN/docs/Glossary/Idempotent" rel="nofollow">幂等

如果同样的请求被执行一次与连续执行多次,对服务器的预期影响是相同的,那么称这个 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.ppmy.cn/ops/134500.html

相关文章

C/C++ 中有哪些类型转换方式? 分别有什么区别?

在C编写C/C代码的时候&#xff0c;我们经常会遇到发生类型转换的场景&#xff0c;比如 赋值运算符的两个操作数不同、实参和形参类型不同、函数返回值类型和接收返回值的类型不同&#xff0c;都会发生类型转换&#xff1b;所以&#xff0c;在C语言中提供了两种类型转换 —— 隐…

CSM32RV20:RISC-V核的低功耗MCU芯片,常用在智能门锁上

CSM32RV20是一款基于RISC-V核的低功耗MCU芯片。 内置RISC-V RV32IMAC内核&#xff08;2.6CoreMark/MHz&#xff09;&#xff1b; 蕞高32MHz工作频率&#xff1b; 内置4kB的SRAM&#xff1b; 内置8B的ALWAYS寄存器&#xff0c;能在掉电模式2下保存数据&#xff1b; 内置40kB的嵌…

【Rust调用Windows API】获取正在运行的全部进程信息

前言 WIndows API官方文档 提供了C的调用示例&#xff0c;最近想尝试用Rust去实现&#xff0c;本系列博客记录一下实现过程。 依赖 Rust调用Windows API需要引入依赖winapi&#xff0c;在Cargo.toml中添加依赖 winapi "0.3.9"调用不同的API集就需要使用相应的功…

Python - 初识Python;Python解释器下载安装;Python IDE(一)

一、初识Python Python 是一种高级编程语言&#xff0c;Python是一种面向对象的解释型计算机程序设计语言&#xff0c;Python由荷兰国家数学与计算机科学研究中心的吉多范罗苏姆&#xff08;&#xff09;Guido van Rossum吉多范罗苏姆&#xff08;&#xff09;于1989 年底发明…

羊城杯2020Easyphp

审题 看到url&#xff0c;可以想到伪协议读取 尝试过后可以发现&#xff0c;题目绕过了read后面的编码 我们可以尝试双重urlencode进行绕过 ?filephp://filter/read%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%…

react 中 memo 模块作用

memo是一个用于优化组件性能的高阶组件。 一、避免不必要的重新渲染 1. 浅比较机制原理 1.1 组件渲染触发条件 在 React 中&#xff0c;当组件的props或state发生变化时&#xff0c;组件会重新渲染。然而&#xff0c;在某些情况下&#xff0c;即使父组件重新渲染并传递给子…

STM32 ADC --- 任意单通道采样

STM32 ADC — 单通道采样 文章目录 STM32 ADC --- 单通道采样cubeMX配置代码修改&#xff1a;应用 使用cubeMX生成HAL工程 需求&#xff1a;有多个通道需要进行ADC采样&#xff0c;实现每次采样只采样一个通道&#xff0c;且可以随时采样不同通道的功能。 cubeMX配置 这里我们…

HarmonyOS4+NEXT星河版入门与项目实战--------开发工具与环境准备

文章目录 1、熟悉鸿蒙官网1、打开官网2、下载 DevEco Studio3、HarmonyOS 资源库4、开发指南与API 2、安装 DevEco Studio1、软件安装2、配置开发工具 1、熟悉鸿蒙官网 1、打开官网 百度搜索 鸿蒙开发者官网 点击进入开发者官网&#xff0c;点击开发&#xff0c;可以看到各种…