Linux网络:应用层协议HTTP(一)

一、什么是HTTP协议

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。
在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。
HTTP 协议是客户端与服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP 协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

1.1URL

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

 

1.2urlencode urldecode(解码和编码)

像 / ? : 等这样的字符, 已经被 url 当做特殊意义理解了. 因此这些字符不能随意出现.
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
转义的规则如下:
将需要转码的字符转为 16 进制,然后从右到左,取 4 位(不足 4 位直接处理),每 2 位
做一位,前面加上%,编码成%XY 格式
例如 :
例如我们搜索C++,++两个符号就被转换成了%2B%2B
urldecode 就是 urlencode 的逆过程;
下面是博主发现的一个非常好用的编码和解码网站,可以自由查看对应的内容经过解码和编码过后的格式
UrlEncode编码/UrlDecode解码 - 站长工具

 

 二、HTTP协议请求与响应格式

GET /Servlet05/get?username=lucy&userpwd=123 HTTP/1.1                            请求行Host: localhost:8080                                                            请求头
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/Servlet05/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Idea-69292d60=aab66041-a5ec-4720-bd7d-906d53381ec2空白行请求体
首行: [方法] + [url] + [版本]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束
Body: 空行后面的内容都是 Body. Body 允许为空字符串. 如果 Body 存在, 则在Header 中会有一个 Content-Length 属性来标识 Body 的长度;如果服务器返回了一 个 html 页面, 那么 html 页面内容就是在 body 中.

 

以下是一些常见的HTTP请求头部(报头)字段的详解:

GET:此方法用于请求指定的资源。GET请求应该安全且幂等,即多次执行相同的GET请求应该产生相同的结果。
POST:此方法用于向指定的资源提交数据,以便根据所提供的数据创建/更新资源。POST请求不是幂等的,每次执行相同的POST请求可能会产生不同的结果。
PUT:此方法用于完整地更新指定的资源。由于PUT请求是幂等的,多次执行相同的PUT请求应该产生相同的结果。
DELETE:此方法用于删除指定的资源。
HEAD:此方法与GET方法类似,只是服务器在响应中只返回HTTP头部,而不返回实际的数据。这用于检查资源的元数据。
OPTIONS:此方法用于获取指定的资源所支持的通信选项。这可以用于CORS(跨源资源共享)检查。
PATCH:此方法用于对资源进行部分更新。
Host:此头部字段指定请求的主机名和/或端口号。这是必需的,因为HTTP是一个基于TCP/IP的协议,没有主机名和端口号,服务器无法知道请求来自哪里。
User-Agent:此头部字段提供了关于发送请求的应用程序或用户代理的信息。这可以包括浏览器的名称和版本、操作系统等信息。
Accept:此头部字段指定客户端接受哪些类型的数据。例如,可以指定接受HTML、JSON、XML等格式的数据。
Content-Type:此头部字段指定在POST或PUT请求中发送的数据的类型。例如,如果发送的是JSON数据,那么此头部字段应该设置为application/json。
Content-Length:此头部字段指定POST或PUT请求中发送的数据的长度。
Cookie:此头部字段包含由服务器发送的cookie信息,这些信息将在后续的请求中自动包含,以便服务器识别用户或保存状态信息。
Authorization:此头部字段用于向服务器提供身份验证信息,例如Bearer token或Basic authentication。
Referer:此头部字段指定原始URL,即从哪个URL页面跳转到了当前页面。
以上就是一些常见的HTTP请求头部字段的详解,这些头部字段在HTTP协议中发挥着重要的作用,使得客户端和服务器之间能够进行有效的通信和数据交换。

 

三、HTTP常见方法

3.1GET 

用途:用于请求 URL 指定的资源。

示例:GET /index.html HTTP/1.1

特性:指定资源经服务器端解析后返回响应内容。

form 表单:https://www.runoob.com/html/html-forms.html

比如一般我们打开腾讯、爱奇艺等视频播放软件,要求我们输入账号密码等信息,用的就是GET操作,这里一般会存在一个表单,当我们输入完用户名和密码之后,点击登录按钮以后,而这个按钮也是有链接属性的,点击以后浏览器就会再次向服务器发送一次http请求去申请相关的资源。

3.2POST方法

用途:用于传输实体的主体,通常用于提交表单数据。

示例:POST /submit.cgi HTTP/1.1

特性:可以发送大量的数据给服务器,并且数据包含在请求体中。

form 表单:https://www.runoob.com/html/html-forms.html

3.3PUT 方法(不常用)

用途:用于传输文件,将请求报文主体中的文件保存到请求 URL 指定的位置。 示例:PUT /example.html HTTP/1.1 特性:不太常用,但在某些情况下,如 RESTful API 中,用于更新资源。

而博主目前接触和常用的方法就是POST和GET方法了,最常用的也是这两种方法,还有很多方法,可以详细去搜索和了解。

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

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

相关文章

C#中的栈和队列

什么是栈 栈和队列是非常重要的两种数据结构,在软件设计中应用很多。栈和队列也是线性结构,线性表、栈和队列这三种数据结构的数据元素以及数据元素间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到眼制。栈的操作只能在表的一端进行,队列的插入操作在表…

安卓篇-unidbg初步测试

前言:目前app的进度是c层的md5魔改 已经做好,又套了一层java层的加密。刚好可以再熟悉一下unidbg 最新版的app ,作为demo测试一下。 分析先看下app 的反编译的结果,很明显,源码很清晰 ,之前的混淆方式一点用没有。 然后跳过去 /* loaded from: classes4.dex */ public c…

FPGA实验5:4位加法计数器

实验目的及要求 掌握时钟信号、进程和BUFFER端口的运用;了解计数器的设计、仿真和硬件测试,进一步熟悉VHDL语句、语法及应用等。 实验原理 运用Quartus II 集成环境下的VHDL文本设计方法设计4位加法计数器,进行波形仿真和分析、引脚分配…

4 Java的基本程序设计结构(基本语法3)- 字符串、面向对象(进阶)

文章目录 前言一、java中的 究竟比较的是什么?二、字符串1 String(1)String的两种构造方式(2)字符数组转字符串、字节数组转字符串(3)字符串的 拼接(4)字符串的内存结构…

【Android面试八股文】荣耀面试算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵

文章目录 1. 算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵1.1 题目描述1.2 算法实现1.2.1 步骤说明:1.2.2 算法实现1.2.3 代码实现:1.2.4 程序说明:1.2.5 示例详细讲解如何将一个矩阵顺时针旋转90度1. 算法题:输入一个N阶方…

Spring -- 三层架构

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 应用分层 介绍 在阿里的开发手册里,关于工程结构部分,定义的常见工程的应用分层结构 那么什么是应用分层呢? 应用分层是一种软件开发设计思想,他将应用程序分层N个层次.这N个层次分别负责各…

Oracle小白菜鸟从入门到精通教程

前言 Oracle公司&#xff08;甲骨文&#xff09;是全球最大的信息管理软件及服务供应商&#xff0c;成立于1977年&#xff0c;总部位于美国加州Redwood shore&#xff0c;面向全球开放oracle认证。Oracle开发的关系数据库产品因性能卓越而闻名&#xff0c;Oracle数据库产品为财…

Hi6274 反激式20瓦电源芯片

HI6274为高性能多模式 PWM 反激式20瓦电源芯片。HI6274较少的外围元器件、较低的系统成本可设计出高性能的"无Y"开关电源。HI6274提供了极为全面和性能优异的智能化保护功能&#xff0c;包括逐周期过流保护、过载保护、软启动、芯片过温保护、可编程输出过压保护功能…

【Langchain大语言模型开发教程】记忆

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Langchain的历史记忆 ConversationBufferMemory 2、基于窗口限制的临时记忆 ConversationBufferWindowMemory 3、基于Token数量的临时记忆 ConversationTokenBufferMemory 4、基于历史…

世界启动Ⅷ--AI视频制作-方案与创新

1.文本/图片生成视频顾名思义&#xff0c;就是输入一段文本描述/上传一张图片即可生成对应的视频。我们常见的Runway、Pika、NeverEnds、Pixverse、svd等都属于此类。比如runway的影视风格Pika的动漫风格NeverEnds的人像模特当然还有一些外延应用&#xff0c;例如最近比较火的阿…

《从C/C++到Java入门指南》- 17.命令行参数

命令行参数 一直写代码的童鞋可能留意到了&#xff0c;main函数中会传入一个String args[]的字符串数组。 这个数组由JVM接收用户输入并传给main函数。 import java.util.*; public class Main {public static void main(String[] args) {for (String arg : args) {System.out…

FLINK-运行架构

为什么要学习Flink运行架构&#xff1f; 虽然现在大厂的开发工具都非常高效、只需要进行参数配置、Flink-sql写业务逻辑&#xff0c;但是在资源配置逻辑优化上不可避免需要了解底层的组件配置。面试时可能也会被问到FLINK是如何进行资源分配、作业运行的等。 以下是在学习时记录…

R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图(二D)

R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图&#xff08;二D&#xff09; 散点图示例解析效果 饼图示例解析效果 折线图示例解析效果 柱状图示例解析效果 箱线图示例解析效果 直方图示例解析效果 等高线图使用filled.contour函数示例…

Python学习—open函数,json与pickle知识点,Os模块详解

目录 1. Open函数 2.json与pickle模块 json模块 1. json.dumps() 2. json.dump() 3. json.loads() 4. json.load() pickle 模块 1. pickle.dumps() 2. pickle.dump() 3. pickle.loads() 4. pickle.load() 3.Os模块 1. Open函数 在Python中&#xff0c;open() 函数…

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署

目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作&#xff0c;本次操作需要java8的版本&#xff0c;将之前安装的java17卸…

IoTDB 分段查询语句详解:GROUP BY + 时序语义

GROUP BY 查询子句的时序语义展开&#xff0c;IoTDB 支持的分段方式总结&#xff01; 存储的数据通过分析来发挥价值&#xff0c;当一组被存储的数据通过查询得到分析后的结果时&#xff0c;这些数据才真正在数据库中实现了价值闭环。 在关系型数据库中&#xff0c;GROUP BY 子…

陀螺仪LSM6DS3TR-C的简单使用

文章目录 一、前言二、硬件1.引脚说明2.原理图 三、软件1.IIC读写函数1.1 读函数1.2 写函数 2.初始化2.1 检测设备是否存在2.2 读取LSM6DS3TRC器件ID2.3 LSM6DS3TRC重启&#xff0c;重置寄存器2.5 LSM6DS3TRC设置块数据更新2.6 LSM6DS3TRC设置加速度计的数据采样率2.7 LSM6DS3T…

剪画小程序:刷到好听的音频怎么将音频保存到手机里

在这个短视频盛行的时代&#xff0c;相信很多朋友都和我一样&#xff0c;常常会被那些精彩视频中的背景音乐深深吸引。 比如我&#xff0c;特别喜欢听歌&#xff0c;这段时间在短视频平台上刷到了好多好看的视频&#xff0c;里面的背景音乐简直绝绝子&#xff01; 那么&#x…

【数据分享】2013-2022年我国省市县三级的逐年SO2数据(excel\shp格式\免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000——2022年的省市县三级的逐年PM2.5数据和2013-2022年的省市县三级的逐年CO数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是我国2013——2022年的省…

《样式设计011:模组-瓷片区》

描述&#xff1a;在开发小程序过程中&#xff0c;发现一些不错的案例&#xff0c;平时使用也比较多&#xff0c;稍微总结了下经验&#xff0c;以下内容可以直接复制使用&#xff0c;希望对大家有所帮助&#xff0c;废话不多说直接上干货&#xff01; 一、小程序&#xff1a;模组…