在客户端与服务器之间,是基于网络来通信的。HTTP协议是最常用的一种网络通信协议(超文本传输协议)。平时我们用到的抢票软件就是通过抓包工具来构造HTTP请求来完成的。所以我们现在就来了解HTTP的相关知识。
零、
主流HTTP的版本是1.1
一、HTTP协议的报文格式
- 请求
- 首行:方法、URL、版本号
- 请求头、键值对结构:每个键值对占一行,键和值之间使用冒号空格分割
- 空行:相当于请求头的结束标志
- 正文:可选
- 响应
- 首行
- 响应头
- 空行:
- 正文:可选
请求
通过抓包工具来获取请求的具体内容
URL
-
格式:
服务器地址:可以是一个IP地址,也可以是域名,但是IP地址不好记。
端口号:通常被隐藏起来。(对于HTTPS的请求,浏览器会自动加上443端口,因为一般的HTTPS服务器都是用 443;对于HTTP的请求,浏览器会自动加上80端口,一般的HTTP服务器都是用80) -
URL的部分内容是可以省略的:
-
省略域名:继续访问当前网站的其他资源
-
省略端口号:浏览器自动填充默认端口
-
省略带层次的路径:表示访问/目录
-
省略query string:本来就是可选的
片段标识符:也可以省略
-
-
URL中的url encode
C%2B%2B:URL里面有一些表示特定含义的符号(或者中文符号),如果query string中也含有这些字符,就会产生错误,我们就需要对其进行url encode
方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
GET方法
-
直接在浏览器地址栏里输入一个URL,输入回车;或者点击浏览器收藏夹里面的链接
-
HTML中的一些标签
img有个src属性,写一个URL,浏览器会根据img中的src构造出对应的HTTP GET请求。同理,还有a中的href属性
-
还能使用JS,直接在浏览器前端构造出HTTP GET请求(ajax)
-
各种编程语言(只要能访问网络),就能构造出HTTP GET请求
-
GET请求里面有很多组header这样的键值对
-
GET请求一般body是空的。
POST方法
登录所用到的。
GET和POST的区别
没有本质区别。
有一些细节区别:
-
(习惯上)GET把客户端的数据通过query string来传输,POST把客户端的数据通过body来传输
-
(习惯上)GET用于从服务器获取数据,POST是客户端给服务端提交数据。
-
要求把GET的请求的处理设置成“幂等”;POST请求的处理不要求实现成”幂等“
-
GET请求可以被缓存(浏览器的收藏夹),POST不行
请求报头 - header
表示在 HTTP 请求或响应中的用来传递附加信息的字段。
- Host
如果是POST请求,就会带上下面两个header
-
Content-Length:body的长度
-
Content-Type:body的格式
-
User-Agent:保存有当前浏览器的类型/版本,以及操作系统的类型、版本