HTTP协议即Hyper Text Transfer Protocol(超文本传输协议),是用于服务器与本地浏览器超文本的传输的传送协议。HTTP基于TCP/IP通信协议传输数据。是一种应用广泛的应用层协议。
如图,我们这里打开的百度网址实际上就是通过HTTP协议来传输数据的。当输入一个网址,按下回车的同时,浏览器就会给百度的服务器发送一个HTTP请求,相应地,百度的服务器也会返回给浏览器一个HTTP响应。响应结果经浏览器解析,反馈给用户,即页面展示成功。但是当我们访问一个网站的时候,一般这样的HTTP请求/响应的交互过程时有多次的。
通过F12打开chrome的开发者工具,就可以在“网络”标签页找到关于HTTP请求/响应的记录:
尽管使用Chrome的开发者工具也可以达到抓包的目的,但其提供的功能有限,使用感不如专门的抓包工具,因此我们推荐使用Fidder,一种功能丰富但易上手的抓包工具。下面附上Fidder的下载地址:https://www.telerik.com/fiddler/
这就是Fidder的页面情况,左侧是HTTP的请求列表,双击任意一条请求,右侧就是请求的详细信息,其中右侧上方就是HTTP请求的详细信息,右侧下方是HTTP响应的详细信息。
所谓抓包工具,实际就是浏览器与服务器交互过程中的“中间商”,浏览器在访问一个网站时,首先把HTTP请求发给Fidder,由Fidder将请求转发给对应网站的服务器,当服务器对请求做出响应时,同样是经由Fidder转发给浏览器,因此Fidder对于浏览器与服务器之间的交互自然是十分清楚的。
所谓URL就是我们俗称的“网址”,对于互联网上的文件,URL都是存在且唯一的,它包含了文件的位置等相关信息;
URL的组成元素中包含了许多有用的信息:
对于一个完整的URL,除了上面URL的组成部分外,还有一些像’/’ ‘?’ ':'等这样的字符,这些字符是被URL赋予了特殊意义的字符。因此为了避免无效URL的出现,如果在URL的某一组成部分中出现了类似字符,就需要对这些字符首先进行转义。n
具体的转义规则和转义情况,这里不做过多介绍,如果确需转义,一般使用在线的urlencode 工具即可;
下面是访问“百度”时,使用抓包工具捕捉到的信息:
HTTP请求主要有这样几部分组成:
请求报头的整体格式是键值对的形式;
键和值之间以分号进行分割;
报头的种类有多种:
空行是请求报头的结束标记
并非所有的HTTP请求都有正文,这取决于用户对网站的具体访问情况;
使用抓包工具捕捉到的一段HTTP响应:
HTTP响应的组成:
与请求报头类似,也是键值对的形式;
同样作为报头的结束标志;
响应正文即服务器返回给浏览器的数据;
HTTP协议的方法有许多种,这里只介绍最常见几种:
Get方法是很常用的HTTP方法,GET方法最初产生的原意是为了获取服务器上的资源,但随着具体生产情景的不断变化,GET方法的应用场景也变得越来越广泛;
我们每在浏览器中输入一个URL并按下回车键,浏览器就会发送给服务器一个GET请求;
HTML中的一些标签,同样也会触发GET请求;
GET请求的URL的长度取决于浏览器和服务器,官方的HTTP协议标准并未对其长度做出限制;
GET请求的特点:
POST方法同样也是一种很常见的HTTP方法,将用户输入的数据提交给服务器是POST方法的初心,但也随着开发场景的不断变化而有了更多的用途;
POST方法的特点:
实际上,POST方法与GET方法没有本质区别,两者的区别主要是体现在使用习惯上:
两者之间的区别都不是绝对的,在很多时候两种方法之间是可以相互替代的;
HTTP协议的请求报头的种类也有多种,这里也仅仅介绍较为常见的:
关于HTTP请求的body的数据格式:
1.json;
2.urlencodes;
form-data;
表示浏览器和操作系统的大致属性;
在浏览器页面,点击这个“小锁头”的图标,就可以看到当前页面的Cookie;
HTTP状态码显示客户端HTTP请求的返回结果及标记服务器端的处理是否正常,可以简单理解为访问一个页面的访问结果,包括访问成功,访问失败或者其他情况。
状态码一般是由3位数字和相关原因短语组成,其中数字中的第一位指定了响应类别。像 200 OK;
状态码的响应类别有下面5种:
状态码的类别有以上5种,而真正存在的状态码则有几十种之多,此处只介绍比较常见的几种状态码:
200 OK;
最常见的一个状态码,表示访问成功,客户端发送的请求在服务器端被正常处理;
304 Not Modified;
表示 客户端发送了附带条件的请求,服务器端允许请求的访问资源,但未满足条件的情况;
400 Bad Request;
请求报文中存在语法错误;
403 Forbidden ;
对请求资源的访问被服务器拒绝了;
404 Not Found;
在服务器上无法找到请求的资源或服务器端拒绝请求且不想说明理由;
4xx的响应结果表明客户端是发生错误的原因所在;
5xx的响应结果表明服务器本身发生错误;
over!