HTTP协议简介

一、HTTP协议介绍

基本介绍:

HTTP:全称超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议。

HTTP是一种应用层协议,是基于TCP/IP通信协议来传输数据的,其中HTTP1.0、HTTP1.1、HTTP2.0均为TCP实现,HTTP3.0基于UDP实现。现主流使用HTTP1.0和HTTP3.0。

协议:为了使数据在网络上从源头到达目的地,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。

通俗点讲,协议就是要保证网络通信的双方,能够互相对接上号。就像是两个人传递纸条通过互相指定的暗号,如果发送天亮了,表示可以打游戏了等等。

 注意:当我们访问一些网页时,是显示通过HTTPS来进行通信的,并且当下大多数的网页都是通过HTTPS来进行通信的,因为HTTPS在HTTP的基础上做了一个加密的工作。

二、HTTP协议的工作过程

当我们在浏览器输入一个网址,此时浏览器就会给对应的服务器发送一个HTTP请求,对应的服务器收到这个请求后,经过计算处理,就会返回一个HTTP响应。并且当我们访问一个网站时,可能涉及不止一次的HTTP请求和响应的交互过程。

基础术语:

客户端:主动发起网络请求的一端

服务端:被动接收网络请求的一端

请求:客户端给服务端发送的数据

响应:服务端给客户端返回的数据

HTTP协议的重要特点:一发一收,一问一答

注意:网络编程中,除了一发一收之外,还有其他的模式

多发一收:例如上传大文件

一发多收:例如看直播时,搜索一个词条可以得到多个视频源

多发多收:例如串流

三、Fiddler抓包工具介绍

抓包工具的使用:

当我们访问一个网站时,可能涉及不止一次的HTTP请求和响应的交互,为此为了更加清楚的了解我们访问一个网站时HTTP请求/协议是怎么交互的,由于HTTP是一个文本格式的协议,就可以通过以下两种方式:

方式一:通过F12打开浏览器的开发者工具,点击Network标签页,然后刷新页面。显示的每一条记录都是一次HTTP请求/响应

 方式二:抓包工具,这里以Fiddler为例,它能够直接读取你电脑上网卡的信息,网卡上有什么数据流动,它都能够感知到并且显示出来。

Fiddler使用方式:

打开Fiddler,然后打开你要访问的网站,访问该网站的HTTP请求和响应就会显示在Fiddler上

 当我们选择好我们要查看的HTTP/HTTPS请求和响应时,右上栏就会显示具体的请求报文内容,右下角就会显示具体的响应报文内容。

请求和响应的详细数据,可以通过右下角的view in Notepad键通过记事本打开

为了方便我们抓取我们自己想查看的抓包结果,可以通过ctrl+a全选左侧的抓包结果,ctrl+x删除选中的所有抓包结果,再进行网页的刷新就行

相应的正文往往是被显示在浏览器上,最常见的响应格式就是html,很多网站返回的html是压缩过的(因为压缩过后,网络传输的数据量就变更少了,即节省了网络带宽),所以需要进行解压缩decode

 注意:直接安装的Fiddler是无法抓取HTTPS的请求的,需要配置才能够抓取。

抓包结果:

接下来我们抓取搜狗首页的HTTP请求,抓取到的结果如下

完整的HTTP请求:

完整的HTTP响应:

 抓包工具原理:

Fiddler之所以能够获取到这些HTTP请求的详细情况,主要是因为此处的Fiddler相当于一个代理程序。

代理,也可以理解为中介或代购,就比如你想通过中介去租房或者买房,你会将你的需求告诉给中介,中介就会去徐州那好哦房源并将找到的结果的详细情况反映给你。

 上述我们通过Fiddler来抓取搜狗首页的HTTP请求时,首选我们会访问sogo.cn,即把HTTP请求发送给Fiddler,Fiddler再把请求转发给搜狗的服务器,当搜狗的服务器返回数据时,Fiddler就会先拿到返回数据,再把数据给浏览器。

 四、HTTP协议格式总览

HTTP请求格式:

 HTTP响应格式:

 

注意:为什么HTTP报文中要存在空行呢?

因为HTTP协议并没有规定报头部分的键值对有多少个,使用空行就相当于是报文的结束标记或报文和正文之间的分隔符

五、HTTP请求

URL 基本介绍


平时我们俗称的”网址“,其实就是 URL(Uniform Resource Locator),翻译为统一资源定位符
互连网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它


URL 基本格式


URL 的标准格式如下:

协议类型:[//服务器地址[:端口号]][/资源层级 UNIX 文件路径]文件名[?查询字符串][#片段标识符]

URLencode介绍

当我们用搜狗搜索时,通过抓包,我们会得到下面这个URL

GET https://www.sogou.com/web?query=%E8%9B%8B%E7%B3%95&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=1129&sst0=1646360982664&lkt=0%2C0%2C0&sugsuv=003B56A6DA4C2A82610BB3A8CFD5D583&sugtime=1646360982664 HTTP/1.1
 

需要URLencode的原因:

这是因为像 /、?、: 等这样的字符,已经被 url 当做特殊意义理解了,因此这些字符不能随意出现。如果某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义,即 urlencode
一个中文字符由 UTF-8 或者 GBK 这样的编码方式构成,虽然在 URL 中没有特殊含义,但是仍然需要进行转义,否则浏览器可能把 UTF-8/GBK 编码中的某个字节当做 URL 中的特殊符号

 认识方法

HTTP中的方法,就是HTTP请求报文中的首行的第一个部分。

 GET请求示例:

 POST方法:

POST方法也是一种常见的方法,多用于提交用户输入的数据给服务器(如登录页面)。

POST请求示例:

 经典面试题

GET和POST区别:

GET 习惯上用于从服务器获取数据;POST 习惯上是客户端给服务器提交数据

幂等是什么?

一个 HTTP 方法是幂等的,指的是同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说,幂等的方法不应该具有副作用。

关于GET请求的URL长度问题的误解:

网上有一种错误的解释: GET 请求的长度是存在上限的,这个上限有被说成 1024kb、2048kb 等等,并且 GET 请求存在上限的原因是 URL 的长度存在上限


RFC 2616 标准正确的解释: HTTP 协议由 RFC 2616 标准定义,该标准中明确说明 "Hypertext Transfer Protocol -- HTTP/1.1," does not specify any requirement for URL length,即没有对 URL 的长度有任何限制


URL 的长度取决因素: 实际上 URL 的长度取决于浏览器的实现和 HTTP 服务器端的实现。在浏览器端,不同的浏览器最大的长度是不同的,但是现在浏览器支持的长度一般都很长;在服务器端,一般这个长度是可以配置的

注意:GET不仅可以传输文本数据,也可以传输二进制数据

Cookie

Cookie是什么?

Cookie 是浏览器提供的一种让程序员在本地存储数据的能力

为什么需要Cookie?

如果没有 Cookie,直接将要存储的数据保存在客户端浏览器所在的主机的硬盘上,那么就会出现很大的安全风险,比如当你不小心打开某个不安全的网站,该网站就可以在你的硬盘上写一个病毒程序,那么你的电脑就挂了!因此浏览器为了保证安全性,就禁止网页中的代码访问主机的硬盘(无法在 JS 中读写文件),因此也就失去了持久化存储的能力,故 Cookie 就很重要!

Cookie里面存储的是什么?

Cookie 中存储了一个字符串,是键值对结构的,键值对之间使用 ;分割,键和值之间使用 = 分割

Cookie来自哪里,如何往Cookie中存储数据?

Cookie 这个数据可能是客户端(网页)自行通过 JS 写入的,也可能来自于服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据。

Cookie 在浏览器这边是按照域名维度来存储的,例如我们打开 优快云 的首页,点击网址栏左边的一把小锁就能找到 Cookie,我们就可以看到打开这个网页时,系统按照不同域名设置了 Cookie。

每一组都是中都存储了 Cookie,我们点开 youkuaiyun.com 这组的 Cookie 就能看到具体的数据

Cookie要到哪里去?

Cookie 字段会在后续的请求中,把浏览器本地存储的这些键值对再发送回服务器

Cookie 的一个经典应用就是保持客户端的登录状态

六、HTTP响应

状态码

200 OK        表示访问成功

404 NOT FOUND        表示没有找到资源

5xx        表示服务器内部出现错误

3xx        表示临时重定向

1xx        表示连接中间状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值