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

应用层——HTTP

像我们电脑和手机使用的应用软件就是在应用层写的,当我们的数据需要传输的时候换将数据传递到传输层。 应用层专门给用户提供应用功能,比如HTTP,FTP…

我们程序员写的一个个解决我们实际的问题都在应用层,我们今天来聊一聊HTTP。

协议

协议是双方约定好的东西,在我们的客户端将数据(结构化的数据)传送给服务端的时候,要先将数据进行序列化(即将结构化的数据变成字节流),服务端得到字节流的数据,然后将字节流的数据反序列化(变成结构化的数据)进行处理。 这里我们传送过去的数据格式就是协议。 这是双方约定好的

我们先来看一看HTTP请求报文的图片
在这里插入图片描述
我们先来认识一下URL
在这里插入图片描述

URLENCODE和URLDECODE

像/ ? : 等这样的字符,已经被url当做特殊的字符特殊处理了。

转移的规则如下:

  • 将需要转码的字符转为16进制,然后从有到左,取4位,每2位做一位,前面加上%,编码成为%XY的格式

在这里插入图片描述

这是我得到的HTTP请求的格式。
在这里插入图片描述
首行: [方法] + [url] + [版本]

Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束

Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个
Content-Length属性来标识Body的长度;

可以注意到请求行中,出现了 / ,其实这就是我们搜索的时候,我们向要从服务端那里拿到什么样的资源。

我先来聊一聊请求的方法
在这里插入图片描述
GET:是从服务器获取指定的资源。(如图片、音频、视频等等)
POST:是根据请求报文对指定的资源做出处理。

其中GET、POST方法是最常见的,我们要知道HTTP是以明文传输的,所以GET和POST方法的就在于,POST比GET更加私密。注意,私密!= 安全,其实GET和POST都是不安全的,当我们在一个网页输入信息的时候,我们输入的信息会出现在URL中,而POST不会出现,所以POST更加私密。

但是通过FIddler抓包,我们发现可以我们输入的信息出现在了正文中,其实也是可以被中间截获的。

协议版本: 我们现实中都在使用手机,即使使用的同一个手机,我们手机的版本也可能是不一样的,当我们需要去获取资源的时候,服务端会根据你版本的高低来判断你是否可以获取到这个资源。
如果出现了一个新的功能,你想使用,但是你版本不满足他们更新后才有的功能,这时你需要更新版本。

HTTP常见的Header

  • Content-Type: 数据类型(text/html等)
  • Content-Length: Body的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
  • User-Agent: 声明用户的操作系统和浏览器版本信息;
  • referer: 当前页面是从哪个页面跳转过来的;
  • location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;(一般用于重定向的时候)
  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;

HTTP的响应报头

在这里插入图片描述
在这里插入图片描述
可以看到是一一对应的, 以下是我的解析

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

HTTP的状态码
在这里插入图片描述

  • 「200 OK」是最常见的成功状态码,表示一切正常。
  • 「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
  • 「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
  • 「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制。

如果想了解具体的状态码,可以去看看下面的这篇文章。
HTTP状态码和原因短语详情

http://www.lryc.cn/news/402485.html

相关文章:

  • 剧本杀小程序搭建,为商家带来新的收益方向
  • 十六、【机器学习】【监督学习】- 支持向量回归 (SVR)
  • 基于FPGA的多路选择器
  • 面经学习(杭州实在智能实习)
  • mysql、oracle、db2数据库连接参数
  • redis缓存击穿和缓存穿透的封装、缓存更新的CacheAside方案、数据预热
  • ArcGIS Pro SDK (九)几何 5 多边形
  • Docker 镜像使用和安装
  • JAVA:Filer过滤器+案例:请求IP访问限制和请求返回值修改
  • FastAPI -- 第三弹(自定义响应、中间件、代理、WebSockets)
  • 网安小贴士(16)网络安全体系
  • UCOSIII 中断管理接口剖析
  • windows 11 PC查询连接过的wlan密码
  • npm install 出现canvas错误
  • Python爬虫入门篇学习记录
  • 怎样对 PostgreSQL 中的慢查询进行分析和优化?
  • Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)
  • Chromium CI/CD 之Jenkins实用指南2024- Windows节点开启SSH服务(七)
  • 阿里大数据面试题集锦及参考答案(3万字长文:持续更新)
  • springboot 配置 spring data redis
  • Numpy基础用法
  • 设计模式--享元模式
  • 可视化剪辑,账号矩阵,视频分发,聚合私信一体化营销工具 源----代码开发部署方案
  • CCF-CSP认证考试 202406-2 矩阵重塑(其二) 100分题解
  • 初阶数据结构的实现1 顺序表和链表
  • 破解反爬虫策略 /_guard/auto.js(一) 原理
  • 40.简易频率计(基于等精度测量法)(3)
  • 关于Centos停更yum无法使用的解决方案
  • 插画感言:成都亚恒丰创教育科技有限公司
  • 【算法】数组中的第K个最大元素