一、基本信息
1、英文简称
HyperText Transfer Protocol
2、一种网络协议,在网络中传输的特定格式的字符串。所以该协议并没有强调下层协议的类型,即承载方,所以不必须为 TCP/IP,只要是可靠的协议就行,因为 HTTP 协议通信仅仅是交互特定格式的字符串,只要保质保量能够传输双方的字符串即可,故对底层协议无过多要求。
3、一般 HTTP 底层网络使用 TCPIP,提供 HTTP 服务的服务器提供的端口号为 80 。
4、HTTP 协议是基于请求 / 响应模型的协议。请求和响应必须成对,先有请求后有响应。
5、HTTP 协议可以传输任何类型的数据,例如 JSON,XML等,其格式的说明由 Content-Type 加以标记。
6、面向无连接,即:每个连接只能处理一个客户端的请求,服务器处理完该请求并收到客户端的应答之后,就断开了连接。
7、版本
- HTTP / 1.0,发送请求,创建一次连接,获得一个 web 资源,连接断开。
- HTTP / 1.1,发送请求,创建一次连接,获得多个 web 资源,连接断开。
二、诞生原因
提供一种发布和接收 HTML 页面的方法,该 HTML 页面在网络中就是特定格式的字符串。
三、协议组成
http 请求包括:请求行、请求头、请求体。
http 响应包括:响应行、响应头、响应体。
1、请求协议
(1)请求行
格式:请求方式 资源路径 协议 + 版本
注意:请求行必须在http请求格式的第一行。
栗子:POST /chapter17/user.html HTTP/1.1
请求方式 | 作用 | 优点 | 缺陷 | 其他 |
get | 请求从服务器中获取数据 | 参数位于 URL 中,有安全隐患; URL 长度限制 get 请求方式数据的大小。 | ||
post | 向服务器中提交数据, 数据位于请求体中 | |||
HEAD | 服务器只返回响应行和响应头 | 较 get 速度快,节省带宽 | ||
DELETE | 删除服务器上资源 | |||
OPTIONS | 用于获取当前URL所支持的方法。 若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。 | |||
PUT | 把一个资源存放在指定的位置上。 | 与 POST 相似,区别在于 PUT 指定了资源的存放位置,而 post 上传的数据由服务器决定存放位置。 | ||
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
(2)请求头
① Accept:告诉服务端,该请求所能支持的响应数据类型,采用 MIME 格式(文件类型的一种描述方式)。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
栗子:
text / html,html 文件
text / css,css 文件
text / javascript,js 文件
image/*,所有图片文件
② User-Agent:浏览器通知服务器,客户端浏览器与操作系统相关信息。
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
③ Connection:表示客户端与服务连接类型;Keep-Alive 表示持久连接,close 短链接。
Connection: keep-alive
④ Content-Length:请求体的长度。
POST http://39.108.107.149:8080/vk/app/rest/ddp/iModelServiceImpl/findModelByType HTTP/1.1
User-Agent: Fiddler
Host: 39.108.107.149:8080
Content-Length: 11
name=城市
⑤ Content-Type:请求的与实体对应的MIME信息。如果是 post 请求,会有这个属性,默认值为 application/x-www-form-urlencoded,表示请求体内容使用 url 编码。
Content-Type: application/x-www-form-urlencoded
⑥ Accept-Encoding:浏览器通知服务器,浏览器支持的数据压缩格式。如 GZIP 压缩。
Accept-Encoding: gzip, deflate
⑦ Accept-Language:浏览器通知服务器,浏览器支持的语言。各国语言(国际化 i18n )
Accept-Language: zh-CN,zh;q=0.9
更多请求头属性可以参考这篇文章:HTTP响应头和请求头信息对照表 。
(3)请求体
当请求方式是 post 时,请求体会有请求的参数,格式如下:
username=zhangsan&password=123
2、响应协议
(1)响应行
① 报文协议及版本;
例如:
HTTP/1.1 200 OK
② 状态码及状态描述;
状态码:由3位数字组成,第一个数字定义了响应的类别
1xx:指示信息,表示请求已接收,继续处理。
2xx:成功,表示请求已被成功接受并处理。
- 200 OK:客户端请求成功
- 204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
- 206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容
3xx:重定向
-
301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
-
302 Found:临时重定向,表示请求的资源临时搬到了其他位置
-
303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
-
307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
-
304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有
4xx:客户端错误
- 400 Bad Request:客户端请求有语法错误,服务器无法理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务
- 404 Not Found:请求资源不存在。比如,输入了错误的url
- 415 Unsupported media type:不支持的媒体类型
5xx:服务器端错误,服务器未能实现合法的请求。
- 500 Internal Server Error:服务器发生不可预期的错误。
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,
(2)响应头
服务器通过响应头来控制浏览器的行为,不同的头浏览器操作不同。
响应头属性可以参考这篇文章:HTTP响应头和请求头信息对照表
(3)响应体
响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染并显示。
四、长连接和短链接区别
1、当请求头中的 Connection 为 keep-alive 时该连接为长连接(默认)。
2、当请求头中的 Connection 为 close 时该链接为短链接。
(SAW:Game Over!)