HTTP协议基本格式

HTTP即HyperText Transfer Protocol(超文本传输协议),HTTP基于TCP/IP协议传输数据。

Chrome抓包

注:Chrome浏览器或Chrome内核浏览器可用(如Edge, Firefox)

  1. 在目标网页打开开发者工具:
    打开开发者工具
  2. 点击网络(Network):
    在这里插入图片描述
    此时就可以看到目标网页的所有请求。
  3. 查看请求和响应:请求和响应

Fiddler代理抓包

浏览器自带抓包工具功能有限,实际开发过程中往往会选择一些代理工具进行抓包。
常见的抓包工具主要有:Charles、Wireshark、Tcpdump、Fiddler等。对于初学者来说,使用简单且免费的Fiddler(Fiddler只适用于Windows系统)即可。

Fiddler默认是不支持抓取HTTPS的,因此需要先进行设置: 先点击Tools-options-HTTPS进行设置:

在这里插入图片描述
在这里插入图片描述
接下来Fiddler就可以进行抓包了。

例如抓取哔哩哔哩的HTML页面请求:
首先打开bilibili网站,要抓的包就是:
在这里插入图片描述
这么多包如何确定我们要找的是哪一个?

  1. 首先看URL,也就是目标域名。
  2. 不同类型的包颜色不同,这里抓的是HTML页面的包,因此找蓝色的。
  3. 看body大小,请求的HTML页面,body大小一般很大。

找到目标后双击即可看到详情:
在这里插入图片描述

HTTP协议格式

HTTP是一种请求——响应式协议,由客户端(即浏览器)发起请求,服务器返回响应。可以通过抓包来分析HTTP协议的请求和响应细节以及特点。
抓包工具可以使用Chrome开发者工具或者Fiddler。

HTTP请求

在这里插入图片描述
对于Get请求,一般没有body,但是Post请求一般有body,在空行后的部分都是body内容。
例如一个Post请求:
在这里插入图片描述
Get请求中虽然可以放body,但一般不建议,某些服务器或代理会忽略或删除get方法中的body,某些客户端不支持get请求添加body等。因此要携带body最好是使用post请求。

首行

首行包括方法、URL以及版本号。

URL

URL(Uniform Resource Locator),即统一资源定位符,俗称“网址”。互联网上的每一个文件都有唯一的一个URL。
一个URL通常包含:协议、主机、端口、路径、查询参数、锚点。
在这里插入图片描述

方法

HTTP协议常用方法有:
在这里插入图片描述

Get方法

GET 是最常用的 HTTP 方法,用来获取服务器的某个资源。抓取的包大多数都是Get请求。

以百度首页为例:
在这里插入图片描述
特点

  • URL中的查询参数可以为空,也可以不为空
  • Header中的若干属性以键值对的形式存在
  • Get请求中的body一般为空
Post方法

在这里插入图片描述
特点

  • URL中的查询参数一般为空
  • Header中的若干属性以键值对的形式存在
  • body 部分一般不为空
  • body 内的数据格式通过 header 中的 Content-Type 指定
  • body 的长度由header 中的 Content-Length 指定
Get与Post的区别

get与post没有本质区别,get和post一般可以互换,但二者有些不同:

  • get一般用于获取,post一般用于提交
  • get方法通过查询参数获取数据,body一般为空
  • post方法通过body提交数据,查询参数一般为空
  • get一般是幂等的,post一般不是幂等的(每次相同请求返回同一个响应就视为幂等)
  • get可以缓存(因为幂等性),post不可以缓存

请求报头中的属性

  • Host:表示服务器主机的地址和端口

明明URL中已经包含了服务器的地址和端口,为什么还要在设置一个Host呢?
其实一个服务器是可以托管多个网站的,这些网站共享同一个IP地址和端口号,但是他们有不同的域名,这时Host的作用就体现出来了。Host属性往往使用域名作为字段,这样便于服务器识别。
例如网站A:www.A.com和网站B:www.B.com由同一个服务器托管,那么他们的URL中的ip地址和端口号就相同。无论是A网站还是B网站发起请求,通过DNS协议进行域名解析后会得到同一个ip地址和端口号,此时就需要Host属性来识别是A网站的请求还是B网站的请求。

  • User-Agent:表示浏览器或操作系统的一些信息,包括类型、版本、语言等。
    User-Agent的作用是让服务器能够识别客户端的类型和能力,从而返回合适的响应。
    例如4399小游戏,需要Flash插件才能正常运行,但是目前浏览器禁止自带Flash功能,因此打开一个小游戏后会显示:
    在这里插入图片描述
    同时User-Agent也用来表示客户端是手机端还是网页端,这也解释了为什么同一个网站,用手机打开和用电脑打开时,页面布局什么的不尽相同。

  • Content-Length:表示body的数据长度

  • Content-Type:表示body中的数据格式
    Content-Type有多种类型,一般分为如下几类:

    1. text/plain,表示纯文本类型。它会把表单中的数据直接放到请求体中。这种格式适合于传输简单的文本数据。

    2. 以application开头的,表示应用类型。如:application/json表示JSON数据格式,application/x-www-form-urlencoded表示表单数据格式。

    3. 以mutipart开头的,表示多部分类型。如:multipart/form-data表示表单数据格式。

      application/x-www-form-urlencoded是默认的表单数据格式,适用于大多数场景,但是不能上传文件和二进制数据
      multipart/form-data是一种多部分数据格式,它把表单中的数据分为多个部分,每个部分用特定的符号分隔开,每个部分都可以有自己的Content-Type和编码方式。可以上传文件和二进制数据
      multipaty/form-data会占用更多的资源和带宽,因此只有上传文件或二进制数据时,才使用multipart/form-data,其他情况都使用application/x-www-form-urlencoded。

  • Referer:表示页面是从哪一个页面跳转过来的。
    例如从百度跳转到B站,抓到的包就是:
    在这里插入图片描述
    这里的refer即表示了B站是从百度跳转过来的。
    当我们在搜索引擎上搜索时,总会出现广告,这些都是广告商投递的,广告商通过搜索提高曝光度:
    在这里插入图片描述
    广告商通过用户点击链接来确认成交量。但是广告商不会只在一个搜索引擎上投递广告,因此refer就可以帮助确定来源。

Cookie和Session

HTTP协议是无状态协议。无状态指的是HTTP服务器没有记忆功能,每次客户端向服务器发送请求,服务器都无法确定这个请求和之前的请求是否有关,例如上某宝网购,虽然一开始登录成功,当我选定某个商品后,准备进行后续操作时,服务器并不能确定这个请求是否关联到之前的请求。之所以这样设计是为了简化服务器的处理逻辑,节省网络传输的成本,但是这样并不便于用户操作,因此引入Cookie和Session来弥补这部分的缺陷。

  • Cookie
    Cookie是一种在客户端存储用户信息的机制,客户端发送请求后,服务器除了返回响应外,还会返回一个Cookie给客户端,Cookie中存储了当前客户端的状态信息,例如登录状态等。当客户端下次发送请求时,会一并把Cookie发过去,服务器就可以根据Cookie来确定客户端的状态。
  • Session
    Cookie中往往会包含一些敏感信息,这些信息在传输过程中是透明的,并不安全,容易被盗用篡改。Session是一种更为安全的方法。
    Session是一种在服务器存储用户信息的机制,客户端发送请求后,服务器除了返回响应外,同时会生成Cookie信息和一个Session ID,服务器把这个Session ID一并返回客户端,后续客户端发起请求时,会一并把Session ID发过来,服务器通过这个Session ID就可以找到对应的Cookie信息,从而确定客户端的状态。

Cookie与Session的区别

  • 存储位置不同:Cookie存储在客户端,Session存储在服务器。
  • 安全性不同:Cookie不安全,Session相对安全。
  • 性能不同:Cookie占用客户端资源,影响浏览体验;Session占用服务器资源,影响性能。
  • 有效期不同:Cookie可以设置有效期,过期自动删除;Session没有设置过期时间时,浏览器关闭即删除。

HTTP响应

HTTP状态码

  • 常见状态码有:
状态码 含义
200 OK(正常)
404 Not Found(没有找到资源)
403 Forbidden(访问被拒绝)
405 Method Not Allowed(方法不支持)
500 Internal Server Error(服务器内部错误)
502 Bad Gateway(错误网关)
504 Gateway Timeout(响应超时)
302 Move temporarily(临时重定向)
301 Moved Permanently(永久重定向)
  • 状态码小结:
    在这里插入图片描述

HTTP响应报头和正文

HTTP响应报头

响应报头的常见属性有:

  1. text/html,这种格式把响应数据转化为HTML格式文档,这种格式适用于返回网页数据,但是需要额外设置编码格式。
    例如:Content-Type=text/html; charset=utf8
  2. text/xml,把响应数据转换为xml格式文档,这种格式适用于返回结构化数据,同样需要设置编码格式或者在xml文档中声明编码格式。
  3. 以image开头的,表示图像类型,将响应数据转化为图片显示。

除此之外还有很多响应属性例如:text/css、text/javascript等。

HTTP响应正文

响应正文的具体格式取决于Content-Type属性。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_71020872/article/details/130915701