【计算机网络协议01】应用层协议HTTP

应用层协议HTTP

引言

应用层协议是程序员自己制定的,但是良好的协议是保证网络通信的基础,前代的计算工程师已经帮助我们制定了一些很好用的应用层协议,http(hybertext transfer protocol)(超文本传输协议)就是其中之一。
http协议是客户端和服务器之间通信的基础,客户端通过HTTP协议像服务器发送请求,服务器收到请求之后处理并返回响应。HTTP协议是一个无连接,无状态的协议,每次请求都需要建立新的连接,服务器不会保存客户端的状态的信息。

URL

俗称网址

URL(Uniform Resource Locator,统一资源定位符)是用于在互联网上定位资源的字符串。它是我们访问网页、下载文件、调用 API 等操作时使用的地址。URL 是 URI(统一资源标识符)的一种具体形式。

一个完整的url一般如下

协议://用户名:密码@子域名.域名.顶级域名:端口号/路径/文件名?查询参数#片段
https://john:password@www.example.com:8080/path/to/page.html?search=query#section1
协议:https域名:www.example.com端口:8080路径:/path/to/page.html查询参数:search=query片段:section1

URL编码

  • URL 中只能包含特定字符(字母、数字和少数符号)。
  • 其他字符(如空格、中文等)需要通过 URL 编码 转换为 % 开头的十六进制值。

示例:

空格编码为 %20

中文“你好”编码为 %E4%BD%A0%E5%A5%BD

HTTP请求的格式

HTTP请求格式

  • 首行 : 方法 + URL + 版本
  • Header: 请求的属性,冒号分割键值对,\r\n最为分隔符,遇到空行表示结束
  • Body允许为空,如果Body不为空,Header中会有Content-lenth字段标记Body的长度
    在这里插入图片描述

HTTP相应的格式

在这里插入图片描述

  • 首行是HTTP版本 + 状态码 + 状态码描述
  • 后面就是参数报头
  • 换行符分隔内容和正文
  • 正文

HTTP请求的方法

就是HTTP请求中的第一个字段
在这里插入图片描述
在日常中最常见的就是GET和POST两种方法

GET方法

用途: 用于请求 URL 指定的资源。
示例: GET /index.html HTTP/1.1
特性: 指定资源经服务器端解析后返回响应内容。
在后端中我们前端的文件,一般存储在wwwRoot为根的目录下,比如/index.html就是请求wwwRoot/index.html这个文件,我们将index.html中的字符填充进入Response中的body中
浏览器就能正确的识别我们的前端文件,然后就是以图形化界面展示给用户。

POST方法

用途: 用于传输实体的主体, 通常用于提交表单数据。
示例: POST /submit.cgi HTTP/1.1
特性: 可以发送大量的数据给服务器, 并且数据包含在请求体中。
form 表单: https://www.runoob.com/html/html-forms.html

状态码 + 状态描述

在这里插入图片描述
状态码是是一个比较大的话题,想要比较深入了解所有的状态码的相关的情况,可以自己去搜索

HTTP中常见的header

请求头(Request Headers)

  • Host: 指定服务器域名和端口号。

  • User-Agent: 客户端信息,如浏览器类型和操作系统。

  • Accept: 客户端可接受的 MIME 类型。

  • Accept-Language: 客户端可接受的语言。

  • Accept-Encoding: 客户端可接受的内容编码,如 gzip。

  • Authorization: 包含认证信息,如 Bearer Token。

  • Content-Type: 请求体的 MIME 类型,如 application/json。

  • Content-Length: 请求体的大小(字节)。

  • Cookie: 包含客户端发送的 cookie。

  • Referer: 请求来源的 URL。

  • Cache-Control: 缓存指令,如 no-cache。

  • Connection: 控制连接状态,如 keep-alive。

响应头(Response Headers)

  • Content-Type: 响应体的 MIME 类型,如 text/html。

  • Content-Length: 响应体的大小(字节)。

  • Content-Encoding: 响应体的编码方式,如 gzip。

  • Set-Cookie: 服务器设置的 cookie。

  • Cache-Control: 缓存指令,如 max-age=3600。

  • Expires: 响应过期时间。

  • Last-Modified: 资源最后修改时间。

  • ETag: 资源唯一标识符,用于缓存验证。

  • Location: 重定向目标 URL。

  • Server: 服务器软件信息。

  • Access-Control-Allow-Origin: 允许跨域请求的源。

  • WWW-Authenticate: 要求客户端进行认证。

通用头(General Headers)

  • Date: 消息生成的日期和时间。

  • Connection: 控制连接状态,如 keep-alive。

  • Transfer-Encoding: 传输编码方式,如 chunked。

总结

应用层协议本来需要程序员自己去指定,但是HTTP等良好的协议值得我们程序员进行学习其中的思想或者直接作为项目协议进行利用。

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

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

相关文章

uniapp 系统学习,从入门到实战(四)—— 页面与路由管理

​ 全篇大概 2700 字(含代码),建议阅读时间 20min 在跨平台开发中,高效的路由管理直接影响用户体验和开发效率。本文将深入探讨uniapp的页面创建、路由跳转、参数传递和生命周期管理,助您构建流畅的多端应用。 📚 目录 页面创建…

BOOST电路设计

目录 1电路模型 2器件选型 2.1设计需求 2.2参数计算 2.2.1电感L计算 2.2.2电容计算 2.2.3电阻计算 3仿真测试 4参数测试 4.1负载调整率 4.2电容测试 4.3电感测试 5实际应用 1电路模型 Boost升压电路,可以工作在电流断续工作模式(DCM)和电流连续工作模式(CCM)。CCM工…

springboot实现文件上传到华为云的obs

一、前言 有时在项目中需要使用一些存储系统来存储文件&#xff0c;那么当项目要接入obs作为存储系统时&#xff0c;就会利用obs来进行文件的上传下载&#xff0c;具体实现如下。 二、如何通过obs实现文件的上传下载&#xff1f; 1.添加相关的obs的maven依赖。 <dependency…

miqiu的分布式锁(二):实战——用JMeter验证JVM锁能否解决MySQL超卖问题

miqiu的分布式锁二&#xff1a;实战——用JMeter验证JVM锁能否解决MySQL超卖问题 实验背景 在秒杀场景中&#xff0c;超卖问题是典型的并发编程挑战。本文通过JMeter压测工具&#xff0c;验证基于JVM的两种锁机制&#xff08;synchronized/ReentrantLock&#xff09;对MySQL库…

《论企业集成平台的理解与应用》审题技巧 - 系统架构设计师

企业集成平台的理解与应用——论文写作框架 一、考点概述 本论题“企业集成平台的理解与应用”主要考察的是计算机软件测试工程师对于企业集成平台&#xff08;EIP&#xff09;的深入理解以及在实际项目中的应用能力。论题涵盖了以下几个核心内容&#xff1a; 首先&#xff…

初阶数据结构(C语言实现)——2算法的时间复杂度和空间复杂度

目录 本节目标1. 算法效率1.1 如何衡量一个算法的好坏1.2 算法的复杂度 2.时间复杂度2.1 时间复杂度的概念2.1.1 入门习题2.1.2 进阶习题 2.2 常见时间复杂度 3. 空间复杂度3.1 常见空间复杂度 本节目标 算法效率时间复杂度空间复杂度常见时间复杂度以及复杂度oj练习 1. 算法…

排序算法(3):

这是我们的最后一篇排序算法了&#xff0c;也是我们的初阶数据结构的最后一篇了。 我们来看&#xff0c;我们之前已经讲完了插入排序&#xff0c;选择排序&#xff0c;交换排序&#xff0c;我们还剩下最后一个归并排序&#xff0c;我们今天就讲解归并排序&#xff0c;另外我们还…

AI智能体与大语言模型:重塑SaaS系统的未来航向

在数字化转型的浪潮中&#xff0c;软件即服务&#xff08;SaaS&#xff09;系统一直是企业提升效率、优化业务流程的重要工具。随着AI智能体和大语言模型&#xff08;LLMs&#xff09;的迅速发展&#xff0c;SaaS系统正迎来前所未有的变革契机。本文将从AI智能体和大语言模型对…

AOP进阶-03.切入点表达式-execution

一.切入点表达式-execution 访问修饰符(public/private等)&#xff0c;包名.类名.&#xff0c;throws 异常都可以省略&#xff0c;但是建议包名.类名.不要省略&#xff0c;否则的话匹配范围太大影响程序执行效率。 *主要用来匹配单个参数&#xff0c;通配任意返回值、包名、类…

神经网络发展简史:从感知机到通用智能的进化之路

引言 神经网络作为人工智能的核心技术&#xff0c;其发展历程堪称一场人类对生物大脑的致敬与超越。本文将用"模型进化"的视角&#xff0c;梳理神经网络发展的五大关键阶段&#xff0c;结合具象化比喻和经典案例&#xff0c;为读者呈现一幅清晰的AI算法发展图谱。 一…

NLP09-加强1-对比SVM

支持向量机&#xff08;SVM&#xff09; &#xff08;一&#xff09;导入 SVM 相关库 &#xff08;二&#xff09; 修改模型初始化 &#xff08;三&#xff09; 比较 朴素贝叶斯分类器 SVM分类器 支持向量机&#xff08;SVM&#xff09; 代码修改基于NLP09-朴素贝叶斯问句…

Spring 源码硬核解析系列专题(八):Spring Security 的认证与授权源码解析

在前几期中,我们从 Spring 核心到 Spring Boot,再到 Spring Cloud,逐步探索了 Spring 生态的底层原理。作为企业级应用的关键组件,Spring Security 提供了全面的安全解决方案,包括认证(Authentication)和授权(Authorization)。本篇将深入 Spring Security 的源码,剖析…

DeepSeek 开源了 DeepEP

DeepSeek又开源了一个超强技术&#xff1a;DeepEP通信库。实现了MOE之间的通信&#xff0c;性能更强了&#xff01; DeepEP作为全球首个专为MoE&#xff08;专家混合&#xff09;模型训练和推理量身定制的EP&#xff08;专家并行&#xff09;通信库&#xff0c;其诞生标志着通…

【C语言】指针笔试题

前言&#xff1a;上期我们介绍了sizeof与strlen的辨析以及sizeof&#xff0c;strlen相关的一些笔试题&#xff0c;这期我们主要来讲指针运算相关的一些笔试题&#xff0c;以此来巩固我们之前所学的指针运算&#xff01; 文章目录 一&#xff0c;指针笔试题1&#xff0c;题目一…

电脑键盘知识

1、键盘四大功能区 1. 功能区 2. 主要信息输入区 3. 编辑区 4. 数字键盘区 笔记本电脑键盘的功能区&#xff0c;使用前需先按Fn键 1.1、功能区 ESC&#xff1a;退出 F1&#xff1a;显示帮助信息 F2&#xff1a;重命名 F4&#xff1a;重复上一步操作 F5&#xff1a;刷新网页 …

在 macOS 系统上安装 kubectl

在 macOS 系统上安装 kubectl 官网&#xff1a;https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-macos/ 用 Homebrew 在 macOS 系统上安装 如果你是 macOS 系统&#xff0c;且用的是 Homebrew 包管理工具&#xff0c; 则可以用 Homebrew 安装 kubectl。 运行…

004 Kafka异常处理

6.异常处理 文章目录 6.异常处理1.异常分类与处理原则2.生产者异常处理1. 同步发送捕获异常2. 异步发送回调处理 3.消费者异常处理1.全局异常处理器2.方法级处理3.重试yml配置 4.死信队列&#xff08;DLQ&#xff09;配置1. 启用死信队列2. 手动发送到DLQ 5.事务场景异常处理1.…

Spring MVC框架六:Ajax技术

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 简介 jQuery.ajax Ajax原理 结语 创作不易&#xff0c;希望能对大家给予帮助 想要获取更多资源? 点击链接获取

数据结构与算法:二维前缀和、二维差分及离散化技巧

前言 有一维的前缀和以及差分当然有二维的~ 一、二维前缀和 1.内容 二维前缀和就是求二维数组上从&#xff08;0,0&#xff09;位置到&#xff08;i,j&#xff09;位置的累加和。 2.模板——二维区域和检索 - 矩阵不可变 class NumMatrix { public:vector<vector<i…

在 Vue 组件中,如何确认父组件在 add 模式下传入 value 的情况及其对子组件 getProducts() 方法的触发影响?

文章目录 父组件中 <ave-form> 的使用add 模式下触发逻辑value 的传入情况是否触发 getProducts()&#xff1f; 验证 add 模式下 getProducts() 是否触发结论&#xff1a; 检查父组件传入 value 的完整情况如何明确知道父组件传入的 value最终回答 父组件 index.vue子组件…