客户端:Web浏览器
服务端:Web服务器
1、概念
- HTTP(HyperText Transfer Protocol,超文本传输协议)是一套计算机通过网络进行通信的规则,HTTP目前协议的版本是1.1。
- HTTP是一种无状态的协议,无状态是指客户端和服务端之间不需要建立持久的连接,这意味着当客户端向服务端发出请求,然后服务端返回响应,连接就关闭了,在服务端不保留连接的有关信息。
- HTTP遵循请求(Request)/应答(Response)模式,客户端向服务端发送请求,服务端处理请求并返回适当的应答。
2、HTTP通信
HTPP通信机制是在一次完整的HTTP通信过程中,客户端与服务端之间将完成下列7个步骤:
- 建立TCP连接
在HTPP开始工作之前,客户端首先要通过网络与服务端建立连接,该连接通过TCP(Transmission Control Protocol,传输控制协议)完成,该协议与IP(Internet Protocol,网络协议)协议共同构建Internet网络,即TCP/IP协议族,因此又被称作TCP/IP网络。HTTP是比TCP更高的应用层协议,根据规则,只有低层协议建立后才能进行高层协议的建立,因此首先要建立TCP连接,一般TCP连接的端口号是80
- 客户端向服务端发送请求命令
TCP连接建立完成,客户端就会向服务端发送请求命令
- 客户端发送请求头信息
客户端发送请求命令之后,还要以头信息的形式向客户端发送一些别的信息,之后客户端发送一行空白行来通知服务端,用以结束该头信息的发送。
- 服务端应答
应答的第一部分是协议的版本号和应答状态码
- 服务端发送应答头信息
服务端也会随同应答向客户端发送关于它自己的数据及被请求的文档
- 服务端向客户端发送数据
客户端在发送头信息结束后,服务端就以Content-Type(内容类型)应答头信息所描述的格式发送客户端所请求的实际数据
- 服务端关闭TCP连接
一般情况下,一旦服务端向客户端发送了请求数据,就会关闭TCP连接。如果客户端或者服务器端在其头信息加入Connection:keep-alive,TCP连接在发送后将仍然保持连接状态,客户端可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络宽带。
3、HTTP请求格式
当客户端向服务端发出请求时,它向服务端传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:
- 请求方法URL(Uniform Resource Locator,统一资源定位符)协议/版本
"GET /static/ui-choose/js/ui-choose.js HTTP/1.1"
"GET":请求方法;
"
/static/ui-choose/js/ui-choose.js ": URL;
"
HTTP/1.1 ":协议以及协议版本;
- 请求头(Request Header)
请求头包含许多优化的客户端环境和请求正文的有用信息。
Accept:text/css,*/*;q=0.1
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:csrftoken=PKnIwV8ASU03czIj8sepMcRoZzvOBBsf; sessionid=38jd2q135jirmtt5ony16d2lwbvh1zsc; bsm2-menu=closed
Host:127.0.0.1:8000
If-Modified-Since:Thu, 08 Jun 2017 06:25:25 GMT
Referer:http://127.0.0.1:8000/map/index/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
- 请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。
username=hello&password=world
4、HTTP应答码
HTTP应答码也称为状态码,它反映了Web服务器处理HTTP请求状态。应答码由3位数字构成,其中首位数字定义了应答码的类型。
应答码 | 类型 | 说明 |
1xx | 信息类(Information) | 收到客户端请求,正在进一步的处理中 |
2xx | 成功类(Successful) | 客户端请求被正确接收、理解和处理 |
3xx | 重定向类(Redirection) | 请求未成功,客户端必须采取进一步的动作,通常这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明 |
4xx | 客户端错误(Client Error) | 客户端提交的请求有错误 |
5xx | 服务端错误(Server Error) | 服务端不能完成对请求的处理 |
5、安全连接
Web应用最常见的用途之一是电子商务,可以利用Web服务器端程序使人们能够网络购物,需要指出一点是,缺省情况下,通过Internet发送信息是不安全的,如果某人碰巧截获了你发给朋友的一则消息,他就能打开它,假想在里面有你的信用卡号码,这会有多么糟糕,幸运的是,很多Web服务器以及Web浏览器都有创立安全连接的能力,这样它们就可以安全的通信了。
通过Internet提供安全连接最常见的标准是安全套接层(Secure Sockets layer,SSl)协议。SSL协议是一个应用层协议(和HTTP一样),用于安全方式在Web上交换数据,SSL使用公开密钥编码系统。从本质讲,这意味着业务中每一方都拥有一个公开的和一个私有的密钥。当一方使用另一方公开密钥进行编码时,只有拥有匹配密钥的人才能对其解码。简单来讲,公开密钥编码提供了一种用于在两方之间交换数据的安全方法,SSL连接建立之后,客户和服务器都交换公开密钥,并在进行业务联系之前进行验证,一旦双方的密钥都通过验证,就可以安全地交换数据。
6、请求方法
方法 | 说明 |
GET | 请求URL得到资源 |
POST | 请求添加新的内容 |
PUT | 请求修改某个内容 |
DELETE | 请求删除某个内容 |
CONNECT | 用于代理进行传输,如:SSL |
OPTIONS | 询问可以执行哪些方法 |
PATCH | 部分文档更改 |
PROPFIND(WebDAV) | 查看属性 |
PROPPATCH(WebDAV) | 设置属性 |
MKCOL(WebDAV) | 创建集合(文件夹) |
COPY(WebDAV) | 拷贝 |
MOVE(WebDAV) | 移动 |
LOCK(WebDAV) | 加锁 |
UNLOCK(WebDAV) | 解锁 |
TRACK | 远程诊断服务端 |
HEAD | 类似GET,但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据 |
注:WebDAV(Web-based Distributed Authoring and Versioning)是一种基于HTTP1.1协议的通信协议。它扩展了HTTP1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定以及解锁,还可以支持文件的版本控制。