一、概念
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;
Web服务器需要监听在80/TCP端口。这样客户端浏览器和Web服务器之间就可以通过HTTP进行通信了。
二、发展阶段
- 0.9:一个交换信息的无序协议,仅仅限于文字。
- 1.0:对每一次请求/响应建立并拆除一次连接,双方规定了连接方式和连接类型,其特点是简单、易于管理。
- 2.0:客户端与web服务器连接后,可以获得多个web资源。
三、工作原理
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
- 客户与服务器建立连接;
- 客户向服务器提出请求;
- 服务器接受请求,并根据请求返回相应的文件作为应答;
- 客户与服务器关闭连接。
客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成千上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。 HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。
三、http请求与响应
3.1 HTTP报文
HTTP报文是在HTTP应用程序之间发送的数据块,分为三部分:
- 起始行:报文的第一行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
- 首部字段:起始行后面有零个或多个首部字段,每个首部字段都包含一个名字和一个值,两者之间用冒号(:)来分隔。
- 主体:首部字段以最后的空行结束,空行之后就是可选的报文主体了,其中包含了所有类型的数据。
3.1 请求
客户端发起请求给服务器。以百度为例:
请求报文:
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
User-Agent: Chrome/96.0.4664.45 Safari/537.36
Accept: text/html,application/xhtml+xml
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: BIDUPSID=9E1580064387061C8DDE4BC1CB4727E1;
请求方法:post、get、delete、put等
3.2 响应
服务器响应后将结果返回给客户端。以百度为例:
Cache-Control: private #缓存控制
Connection: keep-alive #连接
Content-Encoding: gzip #编码
Content-Type: text/html;charset=utf-8 #类型
响应状态码:
100~199——信息性状态码
200~299——成功状态码
300~399——重定向状态码
400~499——客户端错误状态码
500~599——服务器错误状态码
|