1 概述
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于服务器与本地浏览器间通信的传送协议,是一个基于TCP的应用层协议。
2 特性
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
- 灵活:HTTP允许传输任意类型的数据对象。
- 无状态:HTTP服务器默认不保存客户机的信息。
-
支持B/S及C/S模式。
3 通信过程
1)客户机向服务器请求建立TCP连接;
2)建立连接后,客户机发送一个请求报文给服务器;
3)服务器接到请求后,给予相应的响应信息。
4 请求报文
一个典型的请求报文如下:
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
分为三个部分:
- 请求行:包括请求方法、访问路径、HTTP协议版本。
- 请求头部:指定一些属性信息。
- 主体:GET请求的主体为空,POST请求的主体包含表单信息。
其格式如下:
5 响应报文
一个典型的响应报文如下:
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
分为三个部分:
- 状态行:包括HTTP协议版本、状态码、状态信息。
- 响应报头:指定一些属性信息。
- 响应正文:服务器返回给客户端的文本信息。
6 请求方法
GET |
查询数据 |
POST |
将实体提交到指定的资源,可能导致服务器上的数据新建或修改 |
PUT |
新建或修改服务器上的指定数据 |
DELETE |
删除服务器上的指定资源 |
HEAD |
发送一个与GET请求类似的请求,但不要求返回响应正文,常用于故障跟踪 |
OPTIONS |
返回请求的资源所支持的方法 |
TRACE |
追踪一个资源请求中间所经过的代理(该方法不能由浏览器发出) |
7 报头
7.1 请求报头
Accept |
客户端接受的MIME类型 |
Accept-Encoding |
能接受的压缩格式 |
Accept-Lanague |
能接受的语言 |
Connection |
支持的keep-alive特性 |
Host |
制定被请求的Internet主机和端口号 |
User-Agent |
客户端操作系统、浏览器属性等 |
7.2 响应报头
Server |
服务器类型、操作系统 |
Content-Type |
响应正文的媒体类型 |
Content-Encoding |
响应的压缩格式 |
Content-Language |
响应的自然语言 |
Content-Length |
响应正文的字节长度 |
Keep-Alive |
保持连接的时间 |
8 状态码
1xx: |
信息性状态码 100:客户端应当继续发送请求 101:通知客户端采用不同的协议来完成这个请求 |
2xx |
成功状态码 200:OK,正常响应 201:Created,创建新实体 202:Accepted,异步处理已请求成功 204:No Content,响应实体为空 |
3xx |
重定向状态码 301:Moved Premanently,永久重定向,Location响应首部的值仍为当前URL,因此为隐藏重定向 302:Found,临时重定向,显式重定向, Location响应首部的值为新的URL 304:Not Modified,请求的资源未修改,比如本地缓存的资源文件和服务器上比较时,发现并没有修改,服务器返回一个304状态码,告诉浏览器,你不用请求该资源,直接使用本地的资源即可 |
4xx |
客户端错误状态码 400:Bad Request,请求的语法错误 401:Unauthorized,请求资源无法授权给未验证用户 403:Forbidden,请求资源未授权给当前用户 404:Not Found,请求的URL资源并不存在 405:Method Not Allowed,请求方法不匹配 406 :Not Acceptable,请求资源的媒体类型不匹配 |
5xx |
服务器端错误状态码 500:Internal Server Error,服务器内部错误 501:Not Implemented,服务器不支持当前请求 502:Bad Gateway,前面代理服务器联系不到后端的服务器时出现 504:Gateway Timeout,这个是代理能联系到后端的服务器,但是后端的服务器在规定的时间内没有给代理服务器响应 |
9 HTTP版本
9.1 HTTP/1.0
这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。
9.2 HTTP/1.1
- 默认采用持久连接
- 缓存处理
- 支持MIME
9.3 HTTP/2
- 异步连接复用
- 头压缩
- 超文本传输