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

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方法了,最常用的也是这两种方法,还有很多方法,可以详细去搜索和了解。

相关文章:

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

一、什么是HTTP协议 虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。 在互联网世界中,HTTP(HyperText Transfer Protocol&…...

Tomcat底层原理

Tomcat是一个开源的Java Servlet容器,它实现了Java Servlet和JavaServer Pages (JSP) 技术,用于运行Java Web应用。它是由Apache软件基金会开发和维护的。以下是对Tomcat底层原理的详细解析: 1. 启动流程 Tomcat的启动流程主要分为以下几个…...

【Linux】Linux环境设置环境变量操作步骤

Linux环境设置环境变量操作步骤 在一些开发过程中本地调试经常需要依赖环境变量的参数,但是怎么设置对小白来说有点困难,今天就介绍下具体的操作步骤,跟着实战去学习,更好的检验自己的技术水平,做技术还是那句话&…...

C语言:键盘录入案例

主要使用了scanf; scanf的使用方法和注意事项: 1.作用: 用于接收键盘输入的数据并赋值给对应的变量 2.使用方式; scanf("占位符",&变量名); 3.注意事项; 占位符后面的的变量要对应 第一个参数中不写换行 案例1&#xf…...

Nginx 中如何实现请求的排队机制?

Nginx 中如何实现请求的排队机制? 在当今数字化的时代,网站和应用的流量就如同潮水一般,时涨时落,时急时缓。想象一下,当流量如洪水猛兽般汹涌而来,服务器就像是那抗洪的堤坝,如果没有有效的管…...

synergy配置

今天介绍一个电脑同步软件synergy。 我们开发时一般会用两套设备,如果使用两套键盘操作起来会很麻烦,这个软件就是解决这个问题,可以使用一套键盘同时操作两台电脑,另一台作为客户端被控制。 安装 在两台电脑上各自下载安装syne…...

Qt开发网络嗅探器03

数据包分析 想要知道如何解析IP数据包,就要知道不同的IP数据包的包头结构,于是我们上⽹查查资料: 以太网数据包 ARP数据包 IPv4 IPv6 TCP UDP ICMP ICMPv6 根据以上数据包头结构,我们就有了我们的protocol.h文件,声明…...

抖音短视频seo矩阵系统源码开发技术分享(二)--SaaS开源

目录 市场背景分析 一、抖音短视频seo矩阵系统开发部署流程 二、 源码开发功能构思 三、 抖音短视频seo源码开发部署注意事项 四、 部分开发代码展示 市场背景分析 抖音短视频seo矩阵系统是通过不同平台不同账号之间建立联系,通过将同一品牌下不同平台不同账号…...

git-常用基础指令

一、基本指令 1. 配置用户名和邮箱 git config --global user.name "Your Name" git config --global user.email "your.emailexample.com"2. 初始化仓库 git init3. 克隆仓库 git clone <repository_url>4. 查看当前状态 git status5. 添加文件…...

Inconsistent Query Results Based on Output Fields Selection in Milvus Dashboard

题意&#xff1a;在Milvus仪表盘中基于输出字段选择的不一致查询结果 问题背景&#xff1a; Im experiencing an issue with the Milvus dashboard where the search results change based on the selected output fields. Im working on a RAG project using text data conv…...

视觉巡线小车——STM32+OpenMV

系列文章目录 第一章&#xff1a;视觉巡线小车——STM32OpenMV&#xff08;一&#xff09; 第二章&#xff1a;视觉巡线小车——STM32OpenMV&#xff08;二&#xff09; 第三章&#xff1a;视觉巡线小车——STM32OpenMV&#xff08;三&#xff09; 第四章&#xff1a;视觉巡…...

升级TrinityCore 服务器硬件

升级服务器 原服务器架构&#xff1a;Ubuntu装VirtualBox装Ubuntu虚拟机 原配置&#xff1a; 宿主机 内存4G 内核4 usb外接硬盘 Ubuntu虚拟机 内存1756MB 内核4 ip 192.168.0.12 升级服务器架构&#xff1a;FreeBSD装bhyve装Ubuntu虚拟机 新配置&#xff1a;宿主机 内存…...

NVidia 的 gpu 开源 Linux Kernel Module Driver 编译 安装 使用

见面礼&#xff0c;动态查看gpu使用情况&#xff0c;每隔2秒钟自动执行一次 nvidia-smi $ watch -n 2 nvidia-smi 1&#xff0c;找一台nv kmd列表中支持的 GPU 的电脑&#xff0c;安装ubuntu22.04 列表见 github of the kmd source code。 因为 cuda sdk 12.3支持最高到 ubu…...

win7显卡驱动更新后msvcp140.dll丢失的解决方法

msvcp140.dll是一个 DLL&#xff08;动态链接库&#xff09;文件&#xff0c;它是 Microsoft Visual C 2015 Redistributable Package 的一部分。这个文件包含 C 应用程序在运行时所需的标准库函数&#xff0c;主要涉及执行与 C 编程语言相关的操作&#xff0c;如内存管理、数学…...

(11)Python引领金融前沿:投资组合优化实战案例

1. 前言 本篇文章为 Python 对金融的投资组合优化的示例。投资组合优化是从一组可用的投资组合中选择最佳投资组合的过程&#xff0c;目的是最大限度地提高回报和降低风险。 投资组合优化是从一组可用的投资组合中选择最佳投资组合的过程&#xff0c;目的是最大限度地提高回报…...

git删除本地远程分支

gitlab删除远程分支 要删除GitLab上的远程分支&#xff0c;你可以使用Git命令行工具。以下是删除远程分支的步骤和示例代码&#xff1a; 首先&#xff0c;确保你已经在本地删除了分支。删除本地分支的命令是&#xff1a; git branch -d <branch_name> 如果分支没有被合…...

前端-04-VScode敲击键盘有键入音效,怎么关闭

目录 问题解决办法 问题 今天正在VScode敲项目&#xff0c;不知道是按了什么快捷键还是什么的&#xff0c;敲击键盘有声音&#xff0c;超级烦人啊&#xff01;&#xff01;于是我上网查了一下&#xff0c;应该是开启了VScode的键入音效&#xff0c;下面是关闭键入音效的办法。…...

JMeter数据库连接操作及断言

一、数据库操作 应用场景&#xff1a; 接口自动化数据校验&#xff1a;用于验证接口返回的数据与数据库中的数据是否一致。特殊业务&#xff1a;处理一些与数据库相关的特殊业务逻辑。性能测试&#xff1a;测试数据库的性能&#xff0c;如查询、更新等操作的响应时间。 连接数…...

Maven settings.xml 私服上传和拉取配置

公司内部自行开发的依赖包需要上传到maven私服时&#xff0c;可以在项目的pom.xml中配置&#xff0c;也可以在本地计算机的maven目录settings.xml中配置。本文讲述的是如何在settings.xml中进行配置。 场景&#xff1a;有两个maven私服&#xff0c;其中一个为公司的&#xff0…...

【STM32】MPU内存保护单元

注&#xff1a;仅在F7和M7系列上使用介绍 功能&#xff1a; 设置不同存储区域的存储器访问权限&#xff08;管理员、用户&#xff09; 设置存储器&#xff08;内存和外设&#xff09;属性&#xff08;可缓冲、可缓存、可共享&#xff09; 优点&#xff1a;提高嵌入式系统的健壮…...

用Python爬虫能实现什么?

Python 是进行网络爬虫开发的一个非常流行和强大的语言&#xff0c;这主要得益于其丰富的库和框架&#xff0c;比如 requests、BeautifulSoup、Scrapy 等。下面我将简要介绍 Python 爬虫的基础知识和几个关键步骤。 1. 爬虫的基本原理 网络爬虫&#xff08;Web Crawler&#…...

【QT】label中添加QImage图片并旋转(水平翻转、垂直翻转、顺时针旋转、逆时针旋转)

目录 0.简介 1.详细代码及解释 1&#xff09;原label显示在界面上 2&#xff09;水平翻转 3&#xff09;垂直翻转 4&#xff09;顺时针旋转45度 5&#xff09;逆时针旋转 0.简介 环境&#xff1a;windows11 QtCreator 背景&#xff1a;demo&#xff0c;父类为QWidget&a…...

CSP-J模拟赛day1

yjq的吉祥数 文件读写 输入文件 a v o i d . i n avoid.in avoid.in 输出文件 a v o i d . o u t avoid.out avoid.out 限制 1000ms 512MB 题目描述 众所周知&#xff0c; 这个数字在有些时候不是很吉利&#xff0c;因为它谐音为 “散” 所以yjq认为只要是 的整数次幂的数…...

Docker构建LNMP环境并运行Wordpress平台

1.准备Nginx 上传文件 Dockerfile FROM centos:7 as firstADD nginx-1.24.0.tar.gz /opt/ COPY CentOS-Base.repo /etc/yum.repos.d/RUN yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c make && \useradd -M -s /sbin/nologin nginx && \cd /o…...

《峡谷小狐仙-多模态角色扮演游戏助手》复现流程

YongXie66/Honor-of-Kings_RolePlay: The Role Playing Project of Honor-of-Kings Based on LnternLM2。峡谷小狐仙--王者荣耀领域的角色扮演聊天机器人&#xff0c;结合多模态技术将英雄妲己的形象带入大模型中。 (github.com) https://github.com/chg0901/Honor_of_Kings…...

Qt 使用Installer Framework制作安装包

Qt 使用Installer Framework制作安装包 引言一、下载安装 Qt Installer Framework二、简单使用2.1 创建目录结构 (文件夹结构)2.2 制作程序压缩包2.3 制作程序安装包 引言 Qt Installer Framework (安装程序框架)是一个强大的工具集&#xff0c;用于创建自定义的在线和离线安装…...

Typora 1.5.8 版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取(软件可激活使用)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Typora是一款基于Markdown语法的轻量级文本编辑器&#xff0c;它的主要目标是为用户提供一个简洁、高效的写作环境。以下是Typora的一些主要特点和功能&#xff1a; 实时预览&#xff1a;Typora支持实时预览功能&#xff0…...

linux代填密码切换用户

一、背景 linux用户账户密码复杂&#xff0c;在不考虑安全的情况下&#xff0c;想要使用命令自动切换用户 二、操作 通过 expect 工具来实现自动输入密码的效果 yum install expect创建switchRoot.exp文件&#xff0c;内容参考下面的 #!/usr/bin/expect set username root…...

防火墙的经典体系结构及其具体结构

防火墙的经典体系结构及其具体结构 防火墙是保护计算机网络安全的重要设备或软件&#xff0c;主要用于监控和控制进出网络流量&#xff0c;防止未经授权的访问。防火墙的经典体系结构主要包括包过滤防火墙、状态检测防火墙、代理防火墙和下一代防火墙&#xff08;NGFW&#xf…...

【BUG】已解决:note: This is an issue with the package mentioned above,not pip.

已解决&#xff1a;note: This is an issue with the package mentioned above&#xff0c;not pip. 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷…...

政府网站建设服务/艾滋病多久能查出来

sqoop导出数据到mysql需要启动yarn start-yarn.shsqoop导出hive统计数据到mysql----------------------------1.复制mysql驱动程序到sqoop/lib下2.在mysql中创建表createtable stat_act_day(day varchar(50),appid varchar(50),appplatform varchar(50),brand varchar(50),dev…...

网络营销与策划实训/长沙网站优化推广方案

结果为: [2,3] 和 [2] array.splice(start[, deleteCount[, item1[, item2[, …]]]]) splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。 start: 指定修改的开始位置&#xff08;从0计数&#xff09; i…...

常见问题 网站建设/全网营销公司

题目相关 题目链接 洛谷&#xff0c;https://www.luogu.com.cn/problem/P1019。 计蒜客&#xff0c;https://nanti.jisuanke.com/t/T2110。 计蒜客&#xff0c;https://nanti.jisuanke.com/t/T2152。 我的OJ&#xff0c;http://47.110.135.197/problem.php?id4209。 题目…...

人工智能网站建设/关键词排名优化江苏的团队

宣传网页 https://hands-free.github.io/ 机器人项目 https://github.com/HANDS-FREE/handsfree 转载于:https://www.cnblogs.com/kekeoutlook/p/7401627.html...

国内比较好的wordpress主题/站长工具高清吗

写一个函数&#xff0c;求两个整数之和&#xff0c;要求在函数体内不得使用&#xff0c;- &#xff0c;* &#xff0c;/&#xff0c;四则运算符号。 int Add(int num1,int num2) {int sum,carry;do{sum num1 ^ num2;carry (num1 & num2) << 1;num1 sum;num2 carr…...

南极电商是做什么的/汕头网站建设方案优化

用过 Linux 的小伙伴都知道&#xff0c;在Linux系统中包含着大量的文件&#xff0c;绝大部分情况下&#xff0c;我们都是通过 CLI 的方式与Linux进行交互&#xff0c;这就会面临一个问题&#xff0c;当我们需要查找一个文件的时候却迟迟无从下手&#xff0c;不知道该如何找起。…...