HTTP 协议的基本格式

HTTP

什么是HTTP?HTTP是应用层的一个重要协议.它定义了浏览器怎样向服务器请求文件,以及服务器怎样把文件传送给浏览器.

我们打开浏览器,手动输入一个网址:baidu.com.那么此时浏览器就会给百度的服务器发送请求.百度服务器在返回一个html的响应.
HTTP 协议的基本格式_第1张图片

那么我们如何学习HTTP协议呢?通过它的协议报文格式,我们就能看到HTTP具体是什么样子的了。

HTTP的报文协议格式

学习HTTP的报文格式,需要通过一个抓包工具来实现.
那么抓包工具是什么呢?

一. 抓包工具

抓包工具的本质就是一个代理,简称跑腿的.比如A想喝楼下茶百道奶,让给他买.B此时充当的角色就是代理。
HTTP 协议的基本格式_第2张图片

由于B是那个替别人执行任务的,所以非常清楚任务的具体执行过程。
我们引入抓包,就是为了获取想要的原始数据。

我们推荐使用Fiddler来实现http的抓包。

Fidder的使用详解

左右结构

  • 左侧:抓到的包的列表(注意,它是一直在持续的)

  • 右侧:双击找到的包,会出现这个包的详情页。右上:请求 右下:响应
    HTTP 协议的基本格式_第3张图片

二.HTTP请求

双击右上的Raw,就可以看到原来的格式,然后点击view in notepad.就可以通过记事本来打开啦!
下图就是一个完整的HTTP请求:
HTTP 协议的基本格式_第4张图片

HTTP请求的组成部分

  1. 首行
    在这里插入图片描述
    2.Header
    HTTP 协议的基本格式_第5张图片

3.空行
在这里插入图片描述
Header的结束标记
4.正文
body (可有可没有)

下面我们着重介绍四个部分的首行和请求头Header部分

1.首行

HTTP方法

HTTP有很多方法,其中比较重要的有两个:

  • get 请求

  • post请求
    HTTP 协议的基本格式_第6张图片

它们都是客户端向服务器发送请求的方法

get和post的区别
本质上没有室内区别,但是在方法的使用上有些不同.
1.get用来表示“获取一个数据”,post表示“提交一个数据”;
2.get没有body,需要携带数据的话要放入URL中。而Post有body;
3.get是幂等的;=,post无要求;
(幂等就是输入一定,输出也一定。这样只要是同一个输入,就会有同一个输出!!!)
4.get可以缓存,post不可以;
(缓存是建立在幂等的基础之上的,因为输入一定,输出也一定。所以我们可以把输出缓存起来。这样只要是同一个输入。服务器就不用计算了,直接返回缓存中的结果)
5.get可以被浏览器收藏,post不可以。

URL

唯一资源定位标识,描述了网络上的一个唯一的资源。

HTTP 协议的基本格式_第7张图片
如果觉得很抽象的话!我们可以举一个生活中的例子,便于理解。
假设我们要去重庆工商大学的18窗口吃重庆小面:
那用URL来表示就是:
http://重庆工商大学3食堂:18//重庆小面/豌杂面?葱=不要&辣椒=微辣&香菜=不要
服务器地址:重庆工商大学
端口号:18
访问资源:重庆小面的豌杂面
补充说明:不要葱微辣不要香菜.

注:查询字符串是有键值对组成的。&分割键值对,=分割键和值。

版本号

HTTP的版本号有:HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3
最新版本:HTTP/3
最常用版本:HTTP/1.1

2. 请求头Header

键值对结构。每个键值对都是一行;键和值之间采用: (冒号+空格)分割

在这里插入图片描述
空行结束。

Host

描述了浏览器要访问的服务器是谁(地址+端口号)

与URL的区别:
URL中存放的是当前目标,Host中存放的是最终目标。

content-Type和content-Length
  • content-Type

描述body的数据格式

作为请求的写法:

在这里插入图片描述

通过form表单提交数据,body的格式和查询字符串(querry String)一样,也就是url中的查询字符串的格式:username=cy&password=gw520

在这里插入图片描述数据格式是json,字符集是utf-8

{
username:cy;
password:gw520;

}

  • content-Length

描述body的数据长度

在这里插入图片描述

这两个属性是跟着body走的,所以只有请求是Post时,才会出现.

User-Agent(UA)

主要描述系统和浏览器是什么版本。

在这里插入图片描述
作用:
UA在早年互联网行业还未发展起来的时候,是用来区分各种上网设备的(不同的型号等),不同的上网设备能支持的功能不同。
而如今,随着互联网的快速发展,浏览器之间的区别以及非常小了,UA存在的价值就是区分用户是手机端、PC端还是平板。

referer

表示这个页面是从哪个页面跳转过来的。

比如我在百度搜索肖战。
此时的referer表示当前页面是从百度页面跳转过来的:

在这里插入图片描述*

Cookie

俗称小饼干,也是由键值对组成的。它是浏览器在本地存储用户自定义数据的一种重要机制。

HTTP 协议的基本格式_第8张图片
数据都是存储在服务器的,浏览器也需要存储数据吗?是的。
浏览器要存储数据,比如用户信息。那么它如何存储呢?直接访问硬盘文件吗?不可以,如果允许网页访问文件系统的话,如果有不良网页篡改我们硬盘中的某些数据,后果将不堪设想!!!
所以为了保证网络安全,浏览器会限制网页访问我们的文件系统。
既然浏览器阻止网页访问文件系统,又想要存数据。该如何实现呢?Cookie机制!
浏览器通过Cookie机制,允许网页往浏览器这边写入一些自定义的键值对。这些数据通过浏览器的api,写入特定的文件(往指定位置存储指定文件)。

  1. Cookie从哪儿来

从服务器来。当浏览器访问服务器时,服务器会返回一个HTTP响应,响应中的set-Cookie字段就包含了Cookie键值对。

在浏览器搜索baidu.com,通过抓包工具进行抓包,找到这个包,点击响应,打开:
HTTP 协议的基本格式_第9张图片
再次打开浏览器,就可以看到浏览器存储的数据了。
HTTP 协议的基本格式_第10张图片

  1. Cookie到哪里去

浏览器保存之后,后续再访问服务器,就会带上Cookie。

  1. Cookie有什么用

浏览器本地存储数据的机制。最主要的作用就是存储用户登录信息。当再次访问服务器,带上Cookie,服务器就能知道是哪个用户。

例1:我们登录 QQ邮箱,此时浏览器会记住用户登录信息,服务器根据这个用户登陆信息,返回这个用户信息的数据(比如收件箱,草稿箱等等)。我们再去点击收件箱,就不用重新登录了,会直接出来这个这个用户对应的页面。
例2:cookie有点像我们平时的校园卡,校园卡里存储了每个学生的信息,姓名,学号,余额等等。当我们刷校园卡出入校门,系统就能通过校园卡识别信息。确认是本校学生,就可以进门了。

三.HTTP响应

HTTP响应的组成部分

像HTTP请求一样,先点击Raw,再点击使用记事本打开。可以发现,是一个二进制文件!这是由于此时打开的是一个HTTP响应的压缩文件。我们可以点击这个:
在这里插入图片描述

打开,就可以看到解压过后的文本文件了。
如下图是一个完整的HTTP响应:

HTTP 协议的基本格式_第11张图片
HTTP响应也可以分成四个部分:
1.首行

在这里插入图片描述
2.响应报头(Header)
HTTP 协议的基本格式_第12张图片

3.空行
在这里插入图片描述

4.正文
(此处是一个HTML代码HTTP 协议的基本格式_第13张图片
HTTP响应与HTTP请求的组成部分差不多,重点了解HTTP响应首行中的状态码代表什么意思就可以了.

HTTP状态码

表示此次请求是成功还是失败,用数字表示.

HTTP 协议的基本格式_第14张图片
比较经典的错误::
200:表示请求成功
301:永久重定向
302:临时重定向
404:表示访问的资源不存在
403:表示访问被拒绝(没有权限)
500:服务器内部错误
504:服务器访问超时

总结

HTTP协议报文格式:
HTTP 协议的基本格式_第15张图片

你可能感兴趣的:(http,fiddler,前端)