从零开始学HTTP (二) HTTP结构与基础
HTTP结构与基础
这篇文章中,我们主要针对HTTP\1.1版本进行介绍
请求报文和响应报文
请求报文
请求报文由客户端发出,其格式为:
请求方法 请求URI 协议版本 可选的请求首部字段和内容实体,例如:
Post /index.html HTTP/1.1
* Host是请求首部字段,代表服务器主机
Host: www.hukaihe.cn
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length:16
nickName=AgentKyle&age=21
也可以写成下面这种形式:
GET http://www.hukaihe.cn/index.html HTTP/1.1
*不使用Host首部字段
... ...
如果不是访问特定资源而是对服务器本身发起访问,可以用“*”来代替URI
响应报文
响应报文由:HTTP版本号 状态码 原因语句 可选的响应首部字段 实体主体
例如:
HTTP/1.1 200 ok
Date: Tue, 10 Jul 2017 03 18 14:45:15 GMT
Content-Length: 686
Content-Type:text/html
* 资源主体的实体(entity body)
<html>
... ...
HTTP的特点
客户端和服务器端
HTTP协议规定,请求由客户端发出,最后服务器端响应该请求并返回。即肯定是先从服务器端开始建立通信的。
有时候,按实际情况,两台计算机作为客户端和服务器端的角色有可能会互换,但就进一条通信路线而言,服务器端和客户端的角色是确定的。而用HTTP协议能够明确地区分哪端是客户端,哪端是服务器端。
状态
HTTP是无状态(stateless)的协议。这样设计可以更快地处理大量事务,确保协议的可伸缩性,减少服务器的CPU以及内存资源的消耗。
可以使用cookie技术管理HTTP的状态。cookie通过在请求和响应报文中写入cookie信息来控制客户端的状态。cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie信息。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的cookie后,会检查究竟是哪一个客户端发送过来的连接请求,然后对比服务器上的记录,最后得到用户的状态信息。
持久连接与管线化
当我们访问一个带有很多插图的HTML页面时,会发生很多访问这些图片的HTTP请求。如果每次请求都需要重复建立和断开TCP连接会造成很多额外的性能开销。
于是,在HTTP1.1中,所有连接默认采取持久连接(keep-alive)的策略,即在任意一端没有明确提出断开连接,则保持TCP连接状态。这样减少了因为TCP连接带来的额外开销和服务端的负载,使得HTTP请求和响应能够尽早结束,加快web页面的显示速度。
而管线化技术在持久连接的基础上,使得多个请求能够并行发送,不发生阻塞现象。(不必等到一个请求返回响应后才发送另一个请求),这明显的提高了请求的速度。
作者: 圣经的旋律
链接:https://www.imooc.com/article/17058
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作!