【Linux网络】应用层协议HTTP(1)

图片名称
🎉博主首页: 有趣的中国人

🎉专栏首页: Linux网络

🎉其它专栏: C++初阶 | C++进阶 | 初阶数据结构

在这里插入图片描述

小伙伴们大家好,本片文章将会讲解 应用层协议HTTP 的相关内容。


如果看到最后您觉得这篇文章写得不错,有所收获,麻烦点赞👍、收藏🌟、留下评论📝。您的支持是我最大的动力,让我们一起努力,共同成长!

文章目录

  • `1. HTTP协议简介`
  • `2. 认识 URL`
  • `3. HTTP 报文格式`
    • ==<font color = blue><b>🎧3.1 HTTP REQUEST 格式🎧==
    • ==<font color = blue><b>🎧3.2 HTTP RESPONSE格式🎧==
  • `4. 详解 HTTP REQUEST`
    • ==<font color = blue><b>🎧4.1 请求方法🎧==
    • ==<font color = blue><b>🎧4.2 HTTP 版本🎧==
    • ==<font color = blue><b>🎧4.3 HTTP 请求报头🎧==
  • `5. 详解 HTTP RESPONSE`
    • ==<font color = blue><b>🎧5.1 状态码和状态描述🎧==



1. HTTP协议简介


HTTP超文本传输协议)是一种用于在客户端(如浏览器)和服务器之间传输数据的协议。它是互联网通信的基础,用于请求和传输网页及其资源。HTTP是无状态,无连接的,这意味着每个请求都是独立的,不依赖于之前的请求。主要包括以下特性:

  1. 请求和响应:客户端发起请求,服务器响应数据。请求包括方法(如GET、POST)、URL和其他头部信息。响应包括状态码、头部和数据主体;
  2. 无状态:每个请求都是独立的,服务器不保存客户端的状态信息。
    • 每次请求都需要建立新的连接, 且服务器不会保存客户端的状态信息;
  3. 简洁和扩展性:HTTP协议设计简单,易于扩展,支持各种内容类型和请求方法。


2. 认识 URL


平时我们俗称的 “网址” 其实就是说的 URL。

在这里插入图片描述

  • www.example.jp是要访问的服务器的地址,要经过 DNS(域名解析)将域名转换成对应的 IP 地址;
  • 80 代表的是要访问的服务器的端口号,通过IP+端口就可以访问服务器上唯一的进程了。
    • 其中 http 协议默认绑定的就是 80 端口 。
  • /dir/index/html 是你要访问的服务器上的资源的地址。
    • 但是"/" 并不是我们通常认为的根目录,而是 web根目录
  • ?之后的内容是表示要给服务器传送的参数。


3. HTTP 报文格式


🎧3.1 HTTP REQUEST 格式🎧


真实的 http request 格式:


在这里插入图片描述

  • 首行: [方法] + [url] + [版本]
  • Header(报头): 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束;
  • Body(正文): 空行后面的内容都是 Body。Body 允许为空字符串. 如果 Body 存在, 则在Header 中会有一个 Content-Length 属性来标识 Body 的长度;

抽象的 http request 格式:
在这里插入图片描述

🎧3.2 HTTP RESPONSE格式🎧


真实的 http response 格式:


在这里插入图片描述

  • 首行: [版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束;
  • Body: 空行后面的内容都是 Body。Body 允许为空字符串. 如果 Body 存在, 则在
    Header 中会有一个 Content-Length 属性来标识 Body 的长度; 如果服务器返回了一个 html 页面, 那么 html 页面内容就是在 body 中。

抽象的 http response格式:

在这里插入图片描述



4. 详解 HTTP REQUEST


🎧4.1 请求方法🎧


在这里插入图片描述
其中最常用的就是 GET 方法和 POST 方法。

GET 方法:

  • GET 方法一般是用来请求静态资源,例如图片、音频、视频等;
  • 除此之外,也可以用 GET 方法向服务器传送参数;
    • 例如下面这个网站,? 之后的就是传递的参数,以 & 作为分隔符:
      https://editor.csdn.net/md?not_checkout=1&spm=1000.2115.3001.4503&articleId=141829243
      • n o t not not_ c h e c k o u t = 1 checkout=1 checkout=1
      • s p m = 1000.2115.3001.4503 spm=1000.2115.3001.4503 spm=1000.2115.3001.4503
      • a r t i c l e I d = 141829243 articleId=141829243 articleId=141829243

上面三个就是参数,所以能看出来 GET 方法传递参数是通过 URL 来传递的,所以传递的参数长度等肯定有限制。

POST 方法:

  • 使用 POST 方法是要将数据传送到服务器上进行处理,但是它传递参数的方式和GET 不一样;
  • POST 方法传递参数的方式是将要传递的参数放到 HTTP REQUEST 请求正文中进行传递的。

区别:

  • 既然POST方法使用HTTP REQUEST 请求正文发送参数的,说明请求的参数体量可以很大;
  • GET方法是以来URL传递参数的,因此可以被显示的看到,不安全,但是POST方法是请求正文中传递参数的,相较于URL安全一点,但也不是绝对安全;

🎧4.2 HTTP 版本🎧


为什么要有版本:

  • 例如微信或者各种游戏,经常会进行更新,每次更新之后都会有相应功能的改变,例如游戏中游戏角色的加强或者削弱,又例如微信各种功能的改良;
  • 在客户端发送请求时我们需要让服务器知道我们的版本让服务器提供对应版本的功能;
  • 如果没有进行更新,就不会给你新版本的功能(这里估摸着服务器会有一些条件编译)。

🎧4.3 HTTP 请求报头🎧


我这里挑选几个比较重要的讲一下:

  1. Connection
  • Connection表示连接管理,比如是否保持连接(keep-alive)或在请求后关闭连接(close)
    • keep-alive 表示长服务,比如服务器在打开一个文件描述符的时候并不会立马关闭,而是一直处于运行状态知道服务被运行完毕;
    • close 表示短服务,在服务器打开一个文件描述符执行完一个任务的时候会立马关闭这个文件描述符,并在下次客户端请求服务器的时候服务器再重新打开一个文件描述符。
  1. Content-Length
  • 这个就是表示请求正文的长度,很容易理解。

  1. Content-Type
  • Content-Type 是 HTTP 请求和响应报头中的一个重要字段,用于指定请求或响应体的媒体类型(即内容类型)。它告诉接收方(服务器或者客户端)如何解码和处理消息体

一些文件扩展名和Content-Type的对应关系:
在这里插入图片描述

🎉更详细的对应关系: Http请求中各种Content-Type类型详解大全

  1. HOST
  • 客户端告诉服务器要访问的,所请求的资源在那个主机的哪个端口上。
  1. REFERER
  • 表示当前页面是从哪个页面跳转过来的。
  1. USER-AGENT
  • 表示客户端浏览器的版本信息。


5. 详解 HTTP RESPONSE


🎧5.1 状态码和状态描述🎧


五大类状态码:

在这里插入图片描述

  • 其中 3 开头的状态码表示重定向状态码,什么意思呢?
  • 比如客户端想访问我的一个重定向目录:/redir,我们可以在服务器端处理这个路径,当客户端访问 /redir 的时候将这个路径修改成另一个IP和端口,就形成了重定向。

常见的状态码和状态码描述:

🎉常见的状态码和状态码描述: HTTP状态码对照表

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

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

相关文章

OCI编程高级篇(十八) OCI连接池概念

数据库连接池已经不是新概念了&#xff0c;它以有限的连接让外部更多的客户来访问数据库&#xff0c;一般用于中间服务器中&#xff0c;OCI也有连接池的概念。OCI的连接池是由OCI自己管理的&#xff0c;不需要应用干预&#xff0c;程序通过函数从连接池中得到一个会话&#xff…

【Android】 工具篇:ProxyPin抓包详解---夜神模拟器

1️⃣ProxyPin介绍 ProxyPin是一种基于MITM(中间人攻击)的抓包工具,主要用于移动应用程序的安全测试和调试。下面是关于ProxyPin的详解。 2️⃣ 安裝和使用 安裝 下载地址 https://gitee.com/wanghongenpin/network-proxy-flutter/releases 直接拖入模拟器就可以了,打开…

github源码指引:共享内存、数据结构与算法:字符串池StringPool

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 专题&#xff1a;共享内存、数…

5. MyBatis 如何实现数据库类型和 Java 类型的转换的?

MyBatis 在处理数据库查询结果或传递参数时&#xff0c;需要将数据库类型与 Java 类型之间进行转换。MyBatis 提供了多种方式来实现这种类型转换&#xff0c;主要通过内置的 TypeHandler&#xff08;类型处理器&#xff09;机制。 1. TypeHandler 的作用 TypeHandler 是 MyBat…

C++ STL 之哈希 map unordered_map

一. 概述 在C中&#xff0c;unordered_map 是一个关联容器&#xff0c;是一种基于哈希表的键值对容器&#xff0c;它存储了键值对&#xff08;key-value&#xff09;&#xff0c;其中每个键&#xff08;key&#xff09;都是唯一的。 二. map & unordered_map的区别 map内…

rqueue使用笔记

文章目录 maven依赖引入监听器注入和发送消息接收消息属性配置 项目用到rqueue&#xff0c;虽然知道和redis相关&#xff0c;但是肯定有不一样的地方&#xff0c;做个笔记。 maven依赖 网上找个能用的版本就行&#xff0c;如&#xff1a; <dependency><groupId>c…

「深入理解」HTML Meta标签:网页元信息的配置

「深入理解」HTML Meta标签&#xff1a;网页元信息的配置 HTML的<meta>元素用于提供关于HTML文档的元数据&#xff08;metadata&#xff09;&#xff0c;这些信息对于浏览器和其他处理HTML文档的应用程序来说是非常有用的&#xff0c;如&#xff1a;<base>、<li…

【网络安全】服务基础第一阶段——第九节:Windows系统管理基础---- Windows_AD域

目录 一、域与活动目录 1.1 工作组 1.2 域 1.2.1 域&#xff08;Domain&#xff09; 1.2.2 域控制器&#xff08;Domain Controller&#xff0c;DC&#xff09; 1.2.3 功能和角色 1.2.4 管理和监控 1.2 5 域结构 1.3 组织单元&#xff08;Organizational Unit&#xff…

集成电路学习:什么是IP知识产权

一、IP&#xff1a;知识产权 IP是Intellectual Property的缩写&#xff0c;即知识产权。知识产权是一种无形的财产权&#xff0c;也称智力成果权&#xff0c;它指的是通过智力创造性劳动所获得的成果&#xff0c;并且是由智力劳动者对成果依法享有的专有权利。这种权利包括人身…

性能优化:自动化处理系统设计

性能优化&#xff1a;自动化处理系统设计 前言需求分析系统设计1. 调度中心2. 任务执行器3. 错误处理机制4. 通知系统5. 报表生成器6. 日志记录器 技术实现结语 前言 在当今这个信息爆炸、技术日新月异的时代&#xff0c;企业面临着前所未有的挑战和机遇。随着业务量的不断增长…

基于Yolov5_6.1、LPRNet、PySide6开发的车牌识别系统

项目概述 项目背景 随着车辆数量的不断增加&#xff0c;车牌识别系统在交通管理、停车场自动化等领域变得越来越重要。本项目利用先进的深度学习技术和现代图形用户界面框架来实现高效的车牌识别功能。 项目特点 高效识别&#xff1a;采用 YOLOv5_6.1 进行车牌定位&#xff…

差分传输与单端传输

差分与单端传输 本页讨论模拟信号传输中的两个概念&#xff1a;“单端”和“差分”。模拟信号用于将模拟仪器的输出传送到数字转换器。虽然数字信号对干扰的容忍度相对较高&#xff0c;但模拟信号却可能受到环境中电磁波的干扰和改变。本文档将解释这一问题&#xff0c;并描述…

React 入门第九天:与后端API的集成与数据管理

在React学习的第九天&#xff0c;我集中学习了如何与后端API进行集成。这一步是将静态的React应用转变为动态、可交互的关键。通过与后端通信&#xff0c;我们可以从服务器获取数据、发送用户输入以及处理复杂的业务逻辑。 1. 使用fetch进行数据请求 React没有内置的HTTP库&a…

Assembly 跨域通信AppDomain

Assembly 怎么实现跨域通信 在 .NET Framework 中&#xff0c;AppDomain 是一种用于隔离应用程序的机制&#xff0c;可以在单个进程内创建多个应用程序域&#xff08;AppDomain&#xff09;。每个应用程序域都有自己的程序集、资源和内存空间。通过使用 AppDomain&#xff0c;…

Linux 搭建 Java 部署环境:安装 JDK 和 MySQL 的教程

目录 一、apt 二、JDK 2.1 更新软件包 2.2 安装openjdk 三、MySQL 3.1 使用apt安装MySQL 3.2 查看MySQL的状态 3.3 MySQL 安装安全设置 3.4 设置密码 一、apt apt(Advanced Packaging Tool), Linux软件包管理工具&#xff0c;用于在Ubuntu、Debian和相关Linux发行版上…

OcrLiteNcnn:Windows环境打包及Java调用

目录结构 前言cmake安装源码下载说明Windows源码编译执行“cmake -DCMAKE_BUILD_TYPE=Release ..”执行“cmake --build . --config Release -- -m:6”编译完成识别图片命令行调用Java调用前言 Java实现OCR识别图片中的文字,小编先前整理过一篇在Linux环境中基于“ChineseOcr…

OpenCV入门12.2:SURF与SIFT比较及SURF示例

SIFT (Scale-Invariant Feature Transform): 提出时间: 1999年&#xff0c;由David Lowe提出。关键特点: 能够检测和描述图像中的关键点&#xff0c;这些关键点对旋转、缩放和部分亮度变化具有不变性。计算复杂度: 相对较高&#xff0c;因为SIFT使用了高斯差分核来检测关键点&…

小程序面试题二

一、微信小程序的开发原理是什么&#xff1f; 微信小程序的开发原理主要基于Web规范&#xff0c;采用HTML、CSS和JavaScript等前端技术&#xff0c;并结合微信官方提供的特定框架和API进行开发。以下是小程序开发原理的详细解析&#xff1a; 1. 开发框架与语言 WXML&#xff…

全局安装react

1、首先安装react脚手架 npm install -g create-react-app2、创建react项目 create-react-app my-app3、 PS D:\桌面\papers\subject> create-react-app my-react-appCreating a new React app in D:\桌面\papers\subject\my-react-app.Installing packages. This might …

解释 JVM 的内存模型(堆、栈、方法区等),并简述如何通过调整 JVM 参数来优化应用程序的性能?

JVM&#xff08;Java Virtual Machine&#xff09;的内存模型是 Java 程序运行的基础&#xff0c;理解它的各个组成部分对于优化应用程序的性能至关重要。 JVM 的内存模型主要包括以下几个部分&#xff1a; 堆&#xff08;Heap&#xff09;栈&#xff08;Stack&#xff09;方…