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

【学习】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.kler.cn/a/396181.html

相关文章:

  • 精华帖分享|浅谈金融时间序列分析与股价随机游走
  • H5页面多个视频如何只同时播放一个?
  • 酒水分销积分商城小程序开发方案php+uniapp
  • vue 项目使用 nginx 部署
  • Array数组方法
  • 力扣513:找树左下角的值
  • 【前端】深入浅出的React.js详解
  • SpringCloud2023实战之接口服务测试工具SpringBootTest
  • ORB-SLAM2源码学习:ORBextractor.cc:ORBextractor::operator()主入口函数
  • 开源AI大模型工作流神器Flowise本地部署与远程访问
  • VMware高危漏洞VMSA-2024-0019修复堆溢出和权限提升漏洞
  • 最后一个单词的长度---每日小题
  • 【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载
  • Spring Boot框架:电商系统的技术革新
  • CSS Grid 布局实战:从入门到精通
  • 推理计算:GPT-o1 和 AI 治理
  • 一文说清C++类型转换操作符(cast operator)
  • datawhale11月组队学习 模型压缩技术2:PyTorch模型剪枝教程
  • 多路转接之poll
  • SpringBoot整合Minio
  • 第二十章 TCP 客户端 服务器通信 - 立即发送模式(Q 模式)
  • react的import 导入语句中的特殊符号
  • Cpolar 内网穿透使用
  • 人群计数制作私有数据集教程-----自用
  • 动力商城-03 Idea集成apifox Mybatis-Plus字段策略
  • 前端开发中的CSS框架:昔日辉煌与新兴潮流