2023.9.23 关于 HTTP 详解

目录

HTTP 协议

认识 URL

HTTP 请求

  认识方法 

HTTP 响应

认识状态码  

 总结

HTTP 请求的构造 

Form 表单构造

AJAX 构造

Postman 构造


HTTP 协议

  • 应用层使用最广泛的协议
  • 浏览器 基于 HTTP协议 获取网站
  • 是 浏览器 和 服务器 之间的交互桥梁
  • HTTP协议 基于传输层的 TCP协议 实现
  • HTTP 全称为 HyperText Transfer Protocol,中文翻译为 超文本传输,意思是不仅能传输文本,还可传输图片、视频、音频等二进制数据

认识 URL

  • 绿色部分:指 协议方案名
  • 青色部分:指 服务器地址、域名,通过 DNS 可转化为 IP 地址
  • 黄色部分:指 服务器端口号,描述的是哪个程序
  • 橙色部分:指 带层次的文件路径,找到程序管辖下的哪个文件
  • 蓝色部分:指 查询字符串(query string,获取资源时候所带的参数
  • 紫色部分:指 片段标识符

注意:

  • 一个 URL 其中有些部分可以省略

  • 当端口被省略时,浏览器提供默认端口
  • HTTP协议 默认端口为 80,HTTPS协议默认端口为 443
  • 当然这里的 带层次的文件路径 并未省略,/ 也是路径,为 HTTP 服务器的 根目录
  • HTTP服务器 是系统上的一个进程,通常委托该 服务器 管理系统上的一个特定的目录,同时在这个目录里的资源都可以让外面进行访问
  • 当然所管理的 根目录 可以为系统上的任意一个目录,具体看服务器的配置
  • 不同路径 拿到的网页资源是不同的

补充:

  • 当我们在百度搜索框中输入你好

图一:浏览器 URL 框中所显示的 URL

图二:复制浏览器 URL 框中的 URL ,并粘贴到记事本中所显示的 URL

  • 注意这两个 URL 实际是一样的,唯一的不同是中文 "你好" 变成了一串有规律的字符码 
  •  %E4%BD%A0%E5%A5%BD   称为 urlencode(转义字符),将中文 "你好" 重新转译为 % + 16进制数,如果此处不进行编码,直接写中文,浏览器可能就无法正确识别,从而访问出错!
  • urlencode 为编码工具,就有与之对应的 urldecode 解码工具 
  • 通常 urlencode 和 urldecode 都是 浏览器 或 HTTP 服务器内置的行为,一般写代码不会涉及,仅需知道该概念即可

阅读下面内容之前,我们需要了解并熟悉 Fiddle 工具的使用,可点击下方链接阅读

Fiddle 安装使用


HTTP 请求


1.首行

  • 红框代表 HTTP 的方法
  • 篮框代表 URL,唯一资源定位符,标识互联网上唯一的资源的位置(资源在服务器的哪个目录下的哪个文件)
  • 绿框代表 HTTP 的版本号

2.请求头 header

  • 按 行 组织的键值对,每一行均为一个键值对,键和值之间使用 :和 空格 来分割
  • 每个 键和值 均有固定含义,均为 HTTP协议 定义好的

Host

  • 描述服务器所在的地址和端口

Content-Length

  • 表示 body 中的数据长度

Content-Type

  • 表示请求的 body 中的数据格式

User-Agent

  • 描述 操作系统 和 浏览器 的版本,现今主要用来区分 PC端 和 移动端,并返回不同的页面

Referer

  • 描述 当前页面 是从 哪个页面 跳转来的
  • 通过 地址栏输入地址 或 直接点击收藏夹 是没有 Referer 的
  • 本质是 浏览器 给网页提供的 本地存储数据 的机制
  • Cookie 通过 键值对 的方式来组织数据
  • 为了保证安全,网页 默认不允许访问 主机硬盘
  • 但 Cookie 对 浏览器 访问 硬盘 做出了明确的限制,仅能访问限制区域
  • 服务器会通过 HTTP响应 报头部分(Set-Cookie 字段),让浏览器的 Cookie 进行相应存储,所以 Cookie 中的数据来自于服务器
  • Cookie 存储在浏览器中,其实就是存储在硬盘中
  • Cookie 在存储时,按照 浏览器 + 域名 的形式进行细分的
  • 不同的浏览器,各自存储自己的 Cookie,同一浏览器不同域名,也对应着不同的 Cookie
  • Cookie 一般还有过期时间,意味着 Cookie 到达 过期时间 ,浏览器便会自动删除 Cookie,所以 Cookie 并不是永久存储在硬盘中
  • 客户端通过 Cookie 来保存当前 服务器和客户端 交互的中间状态
  • 当客户端访问浏览器的时候,会自动将 Cookie 内容带入到请求中,从而服务器便能知道当前客户端的具体情况,因为一台服务器是为多个客户端提供服务!

3.空白行

  • 首图红框部分即为空白行
  • HTTP协议 并未规定报头部分的键值对的数量,从而空白行便为 报头(header) 的结束标记,即 报头 和 正文 之间的分隔符
  • HTTP 在传输层依赖 TCP 协议,而 TCP 又是面向字节流的,如果无 空白行,便会出现经典的 粘包问题

4.正文 body

  • 不是每个请求均有正文部分
  • 正文存放数据的内容和格式一般由程序员自主定义

  认识方法 

  •  方法描述了 HTTP请求 的语义

  • 在实际的开发中 GET 和 POST 是最常见的两个方法

GET 请求常见的几种形式:

  • 在浏览器地址栏直接输入 URL 访问
  • HTML 中的 link、script、img、a 等标签
  • 通过 JavaScript 构造 GET 请求

POST 请求常见几种形式:

  • 登录操作
  • 上传文件操作

注意:

  • GET 请求无正文 body,POST 请求一般有正文 body
  • 上图的各方法说明是 HTTP设计者的设计初心,但在实际开发中,这些说明仅供参考

GET 和 POST 典型区别:

  • GET 和 POST 没有本质区别,大部分场景下都能相互代替,但是在使用习惯上差异相对较大
  • GET 进行信息的传递一般放在 query string 中,POST 传递信息一般通过 正文 body
  • GET 请求一般是从服务器获取数据,POST 请求一般是用于给服务器提交数据
  • GET 可以被缓存,POST 一般不能缓存(把请求的结果保存下来,下次请求则不需要真请求,直接读取缓存结果就行)
  • GET 一般会被设计成幂等, POST 不要求幂等 

HTTP 响应

 


1.首行

  • 红框代表 HTTP 的版本号
  • 绿框为状态码

2.响应报头 header

  • 键值对结构

3.空白行

  • 首图红框部分即为空白行
  • HTTP协议 并未规定报头部分的键值对的数量,从而空白行便为 报头(header) 的结束标记,即 报头 和 正文 之间的分隔符
  • HTTP 在传输层依赖 TCP 协议,而 TCP 又是面向字节流的,如果无 空白行,便会出现经典的 粘包问题

4.正文

  • 正文可为 json 数据、HTML、CSS、JavaScript、图片 等等
  • 此处正文为 json 数据

认识状态码  

  • 状态码描述了 HTTP响应 的结果
1XXInformational(信息性状态码)接收的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error(服务器错误状态码)服务器请求出错
  • 以下列举几种常见的状态码

200 OK

  • 最常见的一个状态码,表示访问成功

404 Not Found

  • 表示没有找到资源
  • 当输入 URL 访问对方资源服务器上相应资源时,如果该 URL 标识的资源不存在,便出现 404

403 Forbidden

  • 表示访问被拒绝
  • 有些页面通常需要用户有一定权限才能访问,如 用户仅在登录后才能访问的页面 ,如果用户未登录,直接访问该页面,则会出现 403

405 Method Not Allowed

  • 表示对方服务器不支持该方法
  • 如对方服务器仅支持 GET 、POST 方法,其余 PUT、DELETE 等方法不支持,如果使用这些不支持的 HTTP请求方法 来请求服务器,则出现 405

500 Internal Server Error

  • 表示服务器内部出现错误
  • 一般是服务器内部代码执行出现错误、一些异常情况(服务器异常崩溃),便会出现 500

504 Gateway Timeout

  • 表示扮演网关或代理的服务器无法在规定时间内获得想要的响应
  • 当服务器负载比较大的时候,服务器处理单条请求的时候消耗的时间就会很长,便可能会导致出现超时的情况,便会出现 504
  • Gateway 代表网关,就是一个网络的入口或出口,通常代指一个机房的入口服务器
  • 一般 192.168.1.1 这种 IP 为网关 IP

302 Move temporarily

  • 表示临时重定向
  • 在登录页面经常见到 302 ,用于实现登录功能后自动跳转到主页,响应报文的 header 部分会包含一个 Location 字段,表示要跳转到哪个页面

301 Move Permanently

  • 表示永久重定向
  • 当浏览器收到该 HTTP响应状态码,后续的请求都会被自动改为新地址
  • 通过 Location 字段来表示要重定向到新的地址

 总结

 HTTP协议中程序员可自定义:

  • URL 中的路径
  • URL 中的 query string
  • header中的键值对
  • header中的 cookie的键值对
  • 正文 body 

HTTP 请求的构造 

Form 表单构造

代码示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><!-- 表单标签 允许用户和服务器之间交互数据 --><form action="https://www.baidu.com" method="get"><input type="text" name="studentName"><!-- input type="submit" 构造了一个特殊的 提交按钮 value 属性描述了按钮中的文本 --><!-- 点击这个按钮就会触发 form 表单的 提交操作 也就是构造 HTTP 请求发送给服务器 --><input type="submit" value="提交"></form>
</body>
</html>

页面操作

  • 我们使用 Fiddle 将我们构造的请求进行抓包

  • 根据上图我们可以清楚的看到,通过 Form 表单 能构造一个 GET 请求
  • 当然我们也可以通过 Form  表单构造一个 POST 请求

注意:

  • studentName = lisi 这一键值对,GET 请求将其放在 query string 中,而 POST 请求将其放在 正文 body 中,能很好的对应上文讲述的 GET 和 POST 的区别
  • Form 标签仅能构造 GET 和 POST 请求 ,无法构造 PUT、DELETE 等请求

AJAX 构造

  • 全称 Asynchronous Javascript And XML(异步 JavaScript 和 XML)

理解 Asynchronous (异步)

  • 在 HTML 中,使用 AJAX 构造发送 HTTP 请求,此时为异步等待
  • 当执行完发送请求代码后,就可以立即往下执行剩下代码,而不必等待服务器响应回来,当服务器响应回来之后,再由浏览器通知到代码中

代码示例

  • 此处我们引入 jquery 来进行 AJAX 请求的构造
  • jquery 的 api 对原生 api 进行了封装,使用起来简便很多

步骤一:

步骤二:

步骤三:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><!-- 引入 jquery --><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script><script>$.ajax({type:'get',url:'https://www.baidu.com?studentName=lisi',// 此处 success 就声明了一个回调函数,就会在服务器响应返回到浏览器的时候触发该回调// 正是此处的 回调 体现了 "异步"success: function(data) {console.log("在服务器返回响应到达浏览器之前,浏览器触发该回调,通知到代码中!")}});console.log("浏览器立即往下执行后续代码!");</script></body>
</html>
  • 我们使用 Fiddle 将我们构造的请求进行抓包

注意:

  • AJAX 的功能更强,不仅支持 GET 和 POST,同时也支持 DELETE、PUT 等方法
  • AJAX 构造的请求可以灵活设置 header
  • AJAX 发送请求的 正文body 也可以灵活设置

Postman 构造

  • 使用第三方工具,更加便捷的构造 HTTP 请求

步骤一:

步骤二:

步骤三:打开安装好的 Postman,先进行注册登录,在进行下面步骤

步骤四:

步骤五:

步骤六:

步骤七:

  • 完成以上步骤,我们便可以使用 Postman 来构造一个 HTTP 请求了!

注意:

  • Postman 还有一个很好用的功能,可以生成构造请求的对应代码

步骤一:

步骤二:

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

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

相关文章

计算机竞赛 深度学习火车票识别系统

文章目录 0 前言1 课题意义课题难点&#xff1a; 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 图像识别 火车票识别系统 该项目较为新颖&#xff0c;适…

下载盗版网站视频并将.ts视频文件合并

. 1.分析视频请求123 2.数据获取和拼接 1.分析视频请求 1 通过抓包观察我们发现视频是由.ts文件拼接成的每一个.ts文件代表一小段2 通过观察0.ts和1.ts的url我们发现他们只有最后一段不同我们网上找到url获取的包3 我们发现index.m3u8中储存着所有的.ts文件名在拼接上前面固定…

【深度学习实验】卷积神经网络(三):自定义二维卷积层:步长、填充、输入输出通道

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 步长、填充 a. 二维互相关运算&#xff08;corr2d&#xff09; b. 二维卷积层类&#xff08;Conv2D&#xff09; c. 模型测试 d. 代码整合 2. 输入输出通道 a…

mysql的mvcc详解

一 MVCC的作用 1.1 mvcc的作用 1.MVCC&#xff08;Multiversion Concurrency Control&#xff09;多版本并发控制。即通过数据行的多个版本管理来实现数据库的并发控制&#xff0c;使得在InnoDB事务隔离级别下执行一致性读操作有了保障。 2.mysql中的InnoDB中实现了MVCC主要…

前端面试:01.图中输入什么?

~~~~~~~~~~~~~ 先自行想一想&#xff0c;答案在~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ 先自行想一想&#xff0c;答案在~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ 先自行想一想&#xff0c;答案在~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ 先自行想一想&#xff0c;答案在~~~~~~~~~~~~~~~~~ ~~~~~~~~…

ciscn_2019_s_9

ciscn_2019_s_9 Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) RWX: Has RWX segments32位&#xff0c;啥也没开&#xff0c;开心愉悦写shellcode int pwn() {char s[24]; // [esp8…

智能回答机器人的“智能”体现在哪里?

人工智能的广泛应用已经成为当今社会科技发展的趋势之一。通过人工智能技术&#xff0c;我们可以在不同领域中实现自动化、智能化和高效化&#xff0c;从而大大提升生产和生活效率。智能回答机器人的出现和使用便能很好的证明这一点。今天我们就来探讨一下智能会打机器人的“智…

python爬取百度图片

1.查询数据 打开网页。 https://cn.bing.com/images/search?q%E7%99%BE%E5%BA%A6%E5%9B%BE%E7%89%87&formHDRSC2&first1&cw1585&ch924 我们右键查看网页源代码,发现能找到我们需要的img衔接,但是这是一个动态网页。我们每次向下滑动网页&#xff0c;会发现图…

C++核心编程--多态篇

4.7、多态 4.7.1、多态的基本概念 多态是C面向对象三大特征之一 多态分为两类 静态多态&#xff1a;函数重载和运算符重载属于静态多态&#xff0c;复用函数名动态多态&#xff1a;派生类和虚函数实现运行时多态 静态多态和动态多态区别&#xff1a; 静态多态的函数地址早…

校物联网智慧安全用电平台的设计和运用-安科瑞黄安南

一.前言 安全用电历来都是学校安全工作的一个重点&#xff0c;然而每年因此发生的人身伤害以及火灾事故却在继续着&#xff0c;究其原因&#xff0c;主观上是我们的防患意识淡薄&#xff0c;客观上则是由于学生在宿舍使用违规电器、乱拉电线造成的。 现代的大学生宿舍&#x…

【生物信息学】使用谱聚类(Spectral Clustering)算法进行聚类分析

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 3. IDE 三、实验内容 0. 导入必要的工具 1. 生成测试数据 2. 绘制初始数据分布图 3. 循环尝试不同的参数组合并计算聚类效果 4. 输出最佳参数组合 5. 绘制最佳聚类结果图 6. 代码整合 一、实验介绍…

HashMap底层源码,数据结构

HashMap的底层结构在jdk1.7中由数组链表实现&#xff0c;在jdk1.8中由数组链表红黑树实现&#xff0c;以数组链表的结构为例。 JDK1.8之前Put方法&#xff1a; JDK1.8之后Put方法&#xff1a; HashMap基于哈希表的Map接口实现&#xff0c;是以key-value存储形式存在&#xff0c…

K8S内容分发网络之集群,nginx,负载均衡,防火墙

K8S内容分发网络之集群&#xff0c;nginx&#xff0c;负载均衡&#xff0c;防火墙 一、Kubernetes 区域可采用 Kubeadm 方式进行安装。1.所有节点&#xff0c;关闭防火墙规则&#xff0c;关闭selinux&#xff0c;关闭swap交换2.修改主机名3.所有节点修改hosts文件4.调整内核参数…

闪击笔试题

选择题 ping命令不涉及什么协议? A&#xff1a;DNS B: TCP C: ARP D: ICMP B&#xff0c;ping基于ICMP协议&#xff0c;解析路由会用到ARP和DNS a、b、c三人参加学科竞赛&#xff0c;每个学科按一二三名次给x、y、z分&#xff0c;已知a得22分&#xff0c;b和c得9分&#xf…

【图论C++】链式前向星(图(树)的存储)

/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载需获得博主本人…

人工智能的学习算法

1956年&#xff0c;几个计算机科学家相聚在达特茅斯会议&#xff0c;提出了 “人工智能” 的概念&#xff0c;梦想着用当时刚刚出现的计算机来构造复杂的、拥有与人类智慧同样本质特性的机器。其后&#xff0c;人工智能就一直萦绕于人们的脑海之中&#xff0c;并在科研实验室中…

数组和切⽚ - Go语言从入门到实战

数组和切⽚ - Go语言从入门到实战 数组的声明 package main import "fmt" func main() { var a [3]int //声明并初始化为默认零值 a[0] 1 fmt.Println("a:", a) // 输出: a: [1 0 0] b : [3]int{1, 2, 3} //声明同时初始化 fmt.Println("b:…

Airtool for Mac——高效便捷的系统菜单栏网络工具!

在我们的数字化生活中&#xff0c;对于网络连接的稳定性和速度有着越来越高的需求。为了满足您对网络质量的实时监测和分析的需求&#xff0c;我们向大家介绍一款强大的Mac系统菜单栏网络工具——Airtool&#xff01; Airtool是一款专为Mac设计的网络工具&#xff0c;它能够提…

番外5:下载+安装+配置Linux

任务前期工作&#xff1a; 01. 电脑已安装好VMware Workstation软件&#xff1b; 02.提前下载好Rhel-8.iso映像文件&#xff08;文件较大一般在9.4GB&#xff0c;建议采用迅雷下载&#xff09;&#xff0c;本人使用的以下版本&#xff08;地址ed2k://|file|rhel-8.4-x86_64-dvd…

基于PHP+MySQL的养老院管理系统

摘要 随着21世纪互联网时代的兴起&#xff0c;我们见证了人们生活方式的巨大改变。这个时代不仅深刻影响了我们的生活&#xff0c;还改变了我们对信息科学的看法。社会的各个领域都在不断发展&#xff0c;人们的思维也在不断进步&#xff0c;与此同时&#xff0c;信息的需求也与…