【学习】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.rhkb.cn/news/472967.html

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

相关文章

L11.【LeetCode笔记】有效的括号

目录 1.题目 2.分析 理解题意 解决方法 草稿代码 ​编辑 逐一排错 1.当字符串为"["时,分析代码 2.当字符串为"()]"时,分析代码 正确代码(isValid函数部分) 提交结果 3.代码优化 1.题目 https://leetcode.cn/problems/valid-parentheses/descri…

paddle表格识别数据制作

数据格式 其中主要数据有两个一个表格结构的检测框&#xff0c;一个是tokens&#xff0c;注意的地方是 1、只能使用双引号&#xff0c;单引号不行 2、使用带引号的地方是tokens里面 "<tr>", "<td", " colspan2", ">",&quo…

深度学习中的Pixel Shuffle和Pixel Unshuffle:图像超分辨率的秘密武器

在深度学习的计算机视觉任务中&#xff0c;提升图像分辨率和压缩特征图是重要需求。Pixel Shuffle和Pixel Unshuffle是在超分辨率、图像生成等任务中常用的操作&#xff0c;能够通过转换空间维度和通道维度来优化图像特征表示。本篇文章将深入介绍这两种操作的原理&#xff0c;…

阮一峰科技爱好者周刊(第 325 期)推荐工具:一个基于 Next.js 的博客和 CMS 系统

近期&#xff0c;阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress&#xff0c;ReactPress一个基于 Next.js 的博客和 CMS 系统&#xff0c;可查看 demo站点。&#xff08;fecommunity 投稿&#xff09; ReactPress&#xff1a;一款值得推荐的开源发布平台 …

Amazon Web Services (AWS)

一、Amazon Web Services (AWS)介绍 1、简介 2、产品 AWS 提供了各种云计算服务&#xff0c;包括 DynamoDB、S3、EC2、Lambda 等等。 登录aws后点击所有服务也可以看到amazon的所有服务&#xff1a; 3、免费试用产品 除了免费的Amazon Step Functions、Amazon Lambda&#…

rk3399开发环境使用Android 10初体验蓝牙功能

版本 日期 作者 变更表述 1.0 2024/11/10 于忠军 文档创建 零. 前言 由于Bluedroid的介绍文档有限&#xff0c;以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等)&#xff0c;加上需要掌握的语言包括Java/C/C等&#xff0…

Redis实战案例(黑马点评)

List item Redis实战案例&#xff08;黑马点评&#xff09; 一、短信登录 tomcat的运行原理&#xff1a; 当用户发起请求时&#xff0c;会访问tomcat注册的端口&#xff0c;任何程序想要运行&#xff0c;都需要有一个线程对当前端口号进行监听&#xff0c;当用户和tomcat连…

每行数据个数在变的二维数组的输出

#include<stdio.h> int main() {//定义四个一维数组int arr1[1] { 1 };int arr2[3] { 1,2,3 };int arr3[5] { 1,2,3,4,5 };int arr4[7] { 1,2,3,4,5,6,7 };//把四个一维数组放进一个二维数组int* arr[4] { arr1,arr2,arr3,arr4};//预先计算好每一个数组真实的长度in…

IPv6 NDP 记录

NDP&#xff08;Neighbor Discovery Protocol&#xff0c;邻居发现协议&#xff09; 是 IPv6 的一个关键协议&#xff0c;它组合了 IPv4 中的 ARP、ICMP 路由器发现和 ICMP 重定向等协议&#xff0c;并对它们作出了改进。该协议使用 ICMPv6 协议实现&#xff0c;作为 IPv6 的基…

MySQL数据库:SQL语言入门 【2】(学习笔记)

目录 2&#xff0c;DML —— 数据操作语言&#xff08;Data Manipulation Language&#xff09; &#xff08;1&#xff09;insert 增加 数据 &#xff08;2&#xff09;delete 删除 数据 truncate 删除表和数据&#xff0c;再创建一个新表 &#xff08;3&#xf…

第二十一周机器学习笔记:动手深度学习之——数据操作、数据预处理

第二十周周报 摘要Abstract一、动手深度学习1. 数据操作1.1 数据基本操作1.2 数据运算1.2.1 广播机制 1.3 索引和切片 2. 数据预处理 二、复习RNN与LSTM1. Recurrent Neural Network&#xff08;RNN&#xff0c;循环神经网络&#xff09;1.1 词汇vector的编码方式1.2 RNN的变形…

购物车demo全代码-对接支付宝沙箱环境

创建项目 vue create alipay-demoAlipayDemo.vue <template><div class"cart-container"><h2>商品列表</h2><table class"product-table"><tr><th>商品</th><th>价格</th><th>商品描…

【CANOE】【学习】【DecodeString】字节转为中文字符输出

系列文章目录 文章目录 系列文章目录前言一、DecodeString 转为中文字节输出二、代码举例1.代码Demo2.DecodeString 函数说明函数语法&#xff1a;参数说明&#xff1a;返回值&#xff1a;使用示例&#xff1a;示例代码&#xff1a; 说明&#xff1a; 前言 有时候使用的时候&a…

超全超详细使用SAM进行高效图像分割标注(GPU加速推理)

一、前言 &#x1f449; 在计算机视觉任务中&#xff0c;图像分割 是重要的基础工作&#xff0c;但人工标注往往耗时耗力。Meta推出的 SAM&#xff08;Segment Anything Model&#xff09;&#xff0c;大幅提升了分割效率和精度&#xff0c;让标注工作更加轻松。本篇博客将详细…

JavaEE 重要的API阅读

JavaEE API阅读 目的是为了应对学校考试&#xff0c;主要关注的是类的继承关系、抛出错误的类型、包名、包结构等等知识。此帖用于记录。 PageContext抽象类 包名及继承关系 继承自JspContext类。PageContext 实例提供对与某个 JSP 页⾯关联的所有名称空间的访问&#xff0…

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…

Python爬虫----python爬虫基础

一、python爬虫基础-爬虫简介 1、现实生活中实际爬虫有哪些&#xff1f; 2、什么是网络爬虫&#xff1f; 3、什么是通用爬虫和聚焦爬虫&#xff1f; 4、为什么要用python写爬虫程序 5、环境和工具 二、python爬虫基础-http协议和chrome抓包工具 1、什么是http和https协议…

Python学习笔记(2)正则表达式

正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 在 Python 中&#xff0c;使用 re 模块提供的函数来处理正则表达式&#xff0c;允许你在字符串中进行模式匹配、搜索和替换操作。 1 正则表达式 正则表达式(Regular Expressi…

整数唯一分解定理

整数唯一分解定理&#xff0c;也称为算术基本定理&#xff0c;是由德国数学家高斯在其著作《算术研究》中首次提出的。本文回顾整数唯一分解定理以及对应的几个重要结论。 一、整数唯一分解定理 整数唯一分解定理&#xff0c;也称为算术基本定理&#xff0c;是数论中的一个重…

小版本大不同 | Navicat 17 新增 TiDB 功能

近日&#xff0c;Navicat 17 迎来了小版本更新。此次版本新增了对 PingCap 公司的 TiDB 开源分布式关系型数据库的支持&#xff0c;进一步拓展了 Navicat 的兼容边界。即日起&#xff0c;Navicat 17 所有用户可免费升级至最新版本&#xff0c;通过 Navicat 工具实现 TiDB 数据库…