Http详解

news2024/11/24 19:18:22

一、什么是Http协议

Http全称为超文本传输协议,是目前使用最主流的
应用层协议
在这里插入图片描述

二、Http工作过程

当我们在浏览器中输入一个 “网址”, 此时浏览器就会给对应的服务器发送⼀个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回⼀个 HTTP 响应.
在这里插入图片描述

三、Http协议格式

HTTP 是⼀个⽂本格式的协议. 可以通过 Chrome 开发者⼯具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节。

3.1抓包工具使用

以 Fiddler 为例。
在这里插入图片描述
抓到的界面:
在这里插入图片描述
在这里插入图片描述

3.2抓包结果分析

3.2.1HTTP请求

在这里插入图片描述
1.首行格式:
Method:请求方式,GET/POST
URL:请求地址
Version:版本号
2.请求报头格式:
Key: value…
3.空行:空行就相当于是 “报头的结束标记”, 或者是"报头和正文之间的分隔符"。
4.请求正文
在这里插入图片描述

3.2.2HTTP响应

在这里插入图片描述
1.首行格式:
Version:Http版本号
状态码
状态码描述
2.响应报头格式:
Key: value…
3.空行:空行就相当于是 “报头的结束标记”, 或者是"报头和正文之间的分隔符"。
4.响应正文
在这里插入图片描述

四、HTTP请求

4.1请求地址URL

在这里插入图片描述
1.协议名:常见的有http和https,也有其他类型存在
user:pass:这部分现在已经不使用了
2.域名:域名会通过 DNS 系统解析成⼀个具体的 IP 地址。
3.端口号:定位到某台电脑的某个程序
4.文件路径:带层次的文件路径,找到去访问程序里面的哪个页面/接口
5.参数:查询字符串(query string)。本质是⼀个键值对结构,键值对之间使⽤ “&” 分隔;键和值之间使用 “=” 分隔。其中的 key 和 value 的取值和个数,完全都是程序猿自己约定的。
6.片段标识:"#"后是某个控件的id

4.2请求方法

分类:
在这里插入图片描述

4.2.1GET

常用于获取服务器上的某个资源(例如查询用户列表)
特点:
1.首行的第⼀部分为 GET
2.URL 的 query string 可以为空, 也可以不为空.
3.header 部分有若⼲个键值对结构.
4.body 部分为空.
**GET请求有URL长度限制:
HTTP协议标准对URL长度是没有限制的,但是实际 URL 的长度取决于浏览器的实现和 HTTP 服务器端的实现。在浏览器端,不同的浏览器最⼤⻓度是不同的,但是现代浏览器支持的长度⼀般都很长;在服务器端,⼀般这个⻓度是可以配置的。

4.2.2POST

多用于提交用户输⼊的数据给服务器(例如登陆页面)。
特点:
1.首行的第⼀部分为 POST
2.URL 的 query string ⼀般为空 (也可以不为空)
3.header 部分有若干个键值对结构
4.body 部分⼀般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由 header 中的 Content-Length 指定.

4.2.3常见面试题:GET和POST的区别

● 语义不同: GET ⼀般⽤于获取数据, POST ⼀般用于提交数据
● GET 的 body ⼀般为空, 需要传递的数据通过 query string 传递, POST 的 query string ⼀般为空,需要传递的数据通过 body 传递。
● GET 请求⼀般是幂等的, POST 请求⼀般是不幂等的. (如果多次请求得到的结果⼀样, 就视为请求是幂等的)。
● GET 可以被缓存, POST 不能被缓存. (这⼀点也是承接幂等性)。
● 浏览器通常对GET是有最大长度限制的,对POST是没有限制的
● 安全性不同。通常GET是将参数直接显示在url地址上的,而POST是放在body部分的,相对来说POST更安全一点。

4.3请求报头

4.3.1Host

表示服务器主机的地址和端⼝.

4.3.2 Content-Length

表示 body 中的数据长度,验证数据传输过程是否丢失。

4.3.3Content-Type(重要)

表示请求的 body 中的数据格式.
常见选项:
1.application/x-www-form-urlencoded: form
表单提交的数据格式,此时Body的数据格式,形如:
title=test&content=hello

2.multipart/form-data:
表单提交的数据格式,通常用于提交图片/文件。
Body格式形如:
在这里插入图片描述

3.application/json:
数据为 json 格式,Body格式形如:
在这里插入图片描述
在这里插入图片描述

json 格式说明:
在这里插入图片描述

4.3.4 User-Agent (简称 UA)

表示浏览器的属性

4.3.5Referer

表示从哪个页面跳转过来

五、HTTP响应

重点讲解以下两个方面:

5.1状态码

在这里插入图片描述
常见的状态码:

5.1.1 200 OK表示访问成功

在这里插入图片描述

5.1.2 404 Not Found 没有找到资源

在这里插入图片描述

5.1.3 403 Forbidden访问被拒绝

表示访问被拒绝. 有的页面通常需要用户具有⼀定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403.
在这里插入图片描述

5.1.4 500 Internal Server Error

服务器出现内部错误,⼀般是服务器的代码执行过程中遇到了⼀些特殊情况(服务器异常崩溃)会产生这个状态码.

5.1.5 504 Gateway Timeout

当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很⻓, 就可能会导致出现超时的这种情况在双十一等 “秒杀” 场景中容易出现, 平时不太容易见到情况.

5.1.6 302 Move temporarily

临时重定向
理解 “重定向”
就相当于⼿机号码中的 “呼叫转移” 功能.
比如我本来的⼿机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友
知道新号码,只要我去办理⼀个呼叫转移业务, 其他⼈拨打 186-1234-5678 , 就会⾃动转移到 135-1234-5678 上.

5.1.7 301 Moved Permanently

永久重定向. 当浏览器收到这种响应时, 后续的请求都会被⾃动改成新的地址.301 也是通过 Location 字段来表示要重定向到的新地址.

5.1.8总结

在这里插入图片描述

5.2响应报头

响应报头的基本格式和请求报头的格式基本一致。类似于 Content-Type,Content-Length 等属性的含义也和请求中的含义⼀致。
响应中的 Content-Type 常见取值有以下几种:
在这里插入图片描述

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

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

相关文章

DAY06_常用API上

1:API 概述 1.1 API概述 如何自己设计对象并使用 获取已有对象并使用 而关于第一块知识:学习如何自己设计对象并使用,现在已经有一些基础了。 API(Application Programming Interface) :应用程序编程接口 那如何理解应用程序…

软件测试技术(四)白盒测试

白盒测试 白盒测试(White Box Testing)又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程,而不测试软件产品的功能,用于纠正软件系统在描述、表示和规格上的错误&#xff0c…

IDEA弹出`Lombok requires enabled annotation processing`错误信息

问题背景 项目启动时,弹出一个报错窗口 问题原因 当您使用 Lombok 库时,您可能会遇到Lombok requires enabled annotation processing的错误消息。这是因为 Lombok 库使用了 Java 注解处理器(annotation processor),而…

MySQL学习笔记第四天

第04章运算符 3.逻辑运算符 逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1、0或者NULL。 MySQL中支持4种逻辑运算符如下: 3.1逻辑非运算符 逻辑非(NOT或!)运算符表示当给定的值为0时返回…

【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务

限流器的算法选项 随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率&#xff0…

【JavaEE初阶】多线程(四)阻塞队列 定时器 线程池

文章目录 多线程案例阻塞队列概念生产者消费者模型标准库中的阻塞队列自己实现一个阻塞队列 定时器概念标准库中的定时器实现定时器 线程池标准库中的线程池工厂模式 ThreadPoolExecutor();构造方法参数详解(重点)实现线程池 多线程案例 阻塞队列 概念 阻塞队列是一种特殊的…

【软考备战·希赛网每日一练】2023年4月26日

文章目录 一、今日成绩二、错题总结第一题 三、知识查缺 题目及解析来源:2023年04月26日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 数据耦合:一组模块借助参数表传递简单数据。 公共耦合:多个模块都访问同一个…

C++题解 | 逆波兰表达式相关

✨个人主页: 夜 默 🎉所属专栏: C/C相关题解 🎊每篇一句: 图片来源 A year from now you may wish you had started today. 明年今日,你会希望此时此刻的自己已经开始行动了。 文章目录 🌇前言…

改进YOLOv8 | 即插即用篇 | YOLOv8 引入 RepVGG 重参数化模块 |《RepVGG:让VGG风格的卷积神经网络再次伟大》

我们提出了一种简单但功能强大的卷积神经网络结构,该模型在推理时类似于VGG,只有33的卷积和ReLU堆叠而成,而训练时间模型具有多分支拓扑结构。训练时间和推理时间结构的这种解耦是通过结构重新参数化技术实现的,因此该模型被命名为RepVGG。在ImageNet上,RepVGG达到了超过8…

手把手教你搭建属于自己的服务器

最近总是想搭建自己的网站,奈何皮夹里空空如也,服务器也租不起,更别说域名了。于是我就寻思能否自己搭建个服务器,还不要钱呢? 还真行!!! 经过几天的冲浪,我发现有两个免…

AlgoC++第七课:手写Matrix

目录 手写Matrix前言1. 明确需求2. 基本实现2.1 创建矩阵2.2 外部访问2.3 <<操作符重载 3. 矩阵运算3.1 矩阵标量运算3.2 通用矩阵乘法3.3 矩阵求逆 4. 完整示例代码总结 手写Matrix 前言 手写AI推出的全新面向AI算法的C课程 Algo C&#xff0c;链接。记录下个人学习笔记…

01 背包 (二维 )

首先是我对背包问题的理解&#xff1a; 有一个背包可以放下 n kg&#xff0c;有一些物品&#xff0c;价值和重量一一对应&#xff0c;问题是&#xff0c;需要怎样才能使背包中的价值最大&#xff1f; 不同的规则对应不同的背包问题 01背包&#xff1a;每一个物品只能被放入一次…

Docker consul的容器集群的部署|consul-template部署

Docker consul的容器集群的部署|consul-template部署 一、Consul 概述基于nginx和consul构建高可用及自动发现的Docker服务架构 二 consul实验步骤2.1 部署Consul集群 (server)2.2 Consul部署&#xff08;Client端&#xff09;2.3 consul-template部署(server)2.4 编译安装ngin…

【翻译一下官方文档】邂逅uniCloud云函数(基础篇)

我将用图文的形式&#xff0c;把市面上优质的课程加以自己的理解&#xff0c;详细的把&#xff1a;创建一个uniCloud的应用&#xff0c;其中的每一步记录出来&#xff0c;方便大家写项目中&#xff0c;做到哪一步不会了&#xff0c;可以轻松翻看文章进行查阅。&#xff08;此文…

量表题如何分析?

量表是一种测量工具&#xff0c;量表设计标准有很多&#xff0c;并且每种量表的设计都有各自的特性&#xff0c;不同量表的特性也决定了测量尺度&#xff0c;在数据分析中常用的量表为李克特量表。李克特量表1932年由美国社会心理学家李克特在当时原有总加量表的基础上进行改进…

Java8使用Stream流实现List列表简单使用

目录 1.forEach() 2.filter&#xff08;T -> boolean&#xff09; 3.findAny()和findFirst() 4.map(T -> R) 和flatMap(T -> stream) 5.distinct() 去重 6.limit(long n)和skip(long n) 7.anyMatch(T -> boolean) 8.allMatch(T -> boolean) 9.noneMat…

ASP.NET Core MVC 从入门到精通之数据库

随着技术的发展&#xff0c;ASP.NET Core MVC也推出了好长时间&#xff0c;经过不断的版本更新迭代&#xff0c;已经越来越完善&#xff0c;本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容&#xff0c;适用于初学者&#xff0c;在校毕业生&#xff0c…

ThingsBoard教程(三四):筛选规则节点 根据资产,设备,筛选,asset profile switch,device profile switch

前言 这是规则节点解析系列的第一篇,让我们先从Filter Nodes ,筛选节点类型开始。 筛选节点的作用主要是为了从筛选进入规则链的数据,根据一定的判断表达式来判断,数据向下游的那个分支流转。类似我们编程中的switch语句或if语句。 本篇主要讲解asset profile switch 与de…

每天一道算法练习题--Day13 第一章 --算法专题 --- ----------动态规划(重置版)

动态规划是一个从其他行业借鉴过来的词语。 它的大概意思先将一件事情分成若干阶段&#xff0c;然后通过阶段之间的转移达到目标。由于转移的方向通常是多个&#xff0c;因此这个时候就需要决策选择具体哪一个转移方向。 动态规划所要解决的事情通常是完成一个具体的目标&…

什么是渲染农场?我什么时候应该使用渲染农场?

网络上有关渲染农场的概念数不胜数&#xff0c;有一部分说法甚至让我们对渲染农场有了很大误解&#xff0c;究竟真正什么是渲染农场、渲染农场有多少种类型&#xff1f;我们怎么选择适合自己的渲染农场&#xff1f;这些都是各位小伙伴们近期比较关心的一些问题。 首先渲染农场是…