小王学习录
今日摘录
莫听穿林打叶声,何妨吟啸且徐行。
前言
HTTP是应用层中最广泛使用的协议之一,HTTP基于传输层的TCP协议,用于浏览器和web服务器之间进行交互。
浏览器将符合HTTP协议格式的数据填入传输层的socket 发给服务器,服务器进行响应。下面具体介绍:
抓包工具(fiddler)
可以抓包的工具有很多,这里咱们使用的是fiddler。看官可以直接从以下链接中进行下载:
链接:https://pan.baidu.com/s/1rtOYkIaAdHsHLHfj_-NxLw
提取码:2222
需要注意的是fiddler本质上是一个代理程序,在使用fiddler时需要关闭其他代理程序和浏览器上的代理插件。尤其是电脑上下载了easyconnect
,这个软件需要删除。
这里简单提一下:代理分为两种,正向代理和反向代理。代表客户端的代理就是正向代理,代表服务器端的代理就是反向代理。
下面通过抓包工具抓个包来具体学习HTTP协议。
HTTP协议
在HTTP中有http请求和http响应,以下分别介绍:
一. HTTP请求
这是一个HTTP请求报文,由下图可以知道HTTP协议是一个行文本协议。
看报文首行:
首行报文有三个内容,分别是
HTTP方法
,URL
,HTTP版本
。
1. 什么是URL
URL是唯一资源定位符
,俗称网址。
URL最关键的有以下几个部分:
协议名:// 服务器地址(ip地址): 端口号 / 带层次的文件路径 ?查询字符串。
在上面搜狗的URL中,省略了端口号和查询字符串,‘/’ 代表的是根目录。
- 当省略了端口号时,浏览器会根据协议名提供一个默认端口号。如果是HTTP则默认端口号是
80
,如果是HTTPS则默认端口号是443
。/
代表的是HTTP服务器根目录,HTTP服务器是系统中的一个进程,系统会给HTTP服务器一个特定的目录
交给HTTP服务器进行管理。该目录中的资源都可以供用户进行访问。具体HTTP服务器的根目录是哪个目录要看服务器的配置
。
https://mp.csdn.net/mp_blog/manage/article?spm=1010.2135.3001.5448
在这个RUL中包括了:- 协议名:
https
- 服务器地址:
mp.csdn.net
- 带层次的路径:
/mp_blog/manage/article
表示根目录下的mp_blog
目录下的manage
目录中的article
文件。- 查询字符串(query string):
spm=1010.2135.3001.5448
。查询字符串通常以键值对的形式出现,多个键值对用&
符号隔开。
注意:
查询字符串(query string)中有些字符是有特殊意义的(如?/ :中文等),对于这些字符不能直接出现在query string 中,需要进行重新编码才能被浏览器正确识别。重新编码时使用的编码方式时urlencode
,解码时用urldecode
。
2. 什么是HTTP方法
HTTP方法描述了这次请求要干什么,对于不同的操作类型有不同的HTTP方法,常见的HTTP方法中包括了以下几个:
GET
: 从服务器获取资源POST
: 向服务器提交数据,用于创建新资源。PUT
: 向服务器提交数据,用于创建或更新新资源。DELETE
: 请求服务器删除指定的资源。
-PATCH
:对资源进行部分修改HEAD
:类似于GET,但只返回头部信息。OPTIONS
: 获取目标资源支持的通信方法
天下HTTP方法十斗,GET占八斗,POST独占一斗,剩余方法共占一斗。日常绝大多数见到的都是get方法和post方法,所以这里主要介绍这两个方法。
需要注意的是,虽然对于不同的操作类型都有不同的HTTP方法,但是实际上这些不同方法的语义仅仅只有参考价值。例如:在一些环境中,get方法可以代替POST方法。
(1)GET请求
以下四种行为都能触发GET请求:
- 在浏览器地址栏中直接输入url
- 在执行html代码时的link,script,img,a等标签
- 用from标签构造get请求
- 用js构造get请求(ajax:异步的JavaScript和xml)
接下来我们看一下get请求的报文: