基本常识
- Web页面是由对象组成的。这个对象可以是一个html文件,也可以是图片等,且它们可以通过一个url地址寻找。
- 浏览器实现了HTTP的客户端,Web服务器实现了HTTP的服务器端。
- HTTP是一个无状态的协议。当HTTP客户端多次请求同一个对象,HTTP服务器端并不会因为此前返回过这个对象就不再响应,而是每请求一次就响应一次。
客户端套接字是客户端应用进程与TCP连接之门,负责HTTP请求报文的发送和响应报文的接收。服务端套接字是服务端应用进程与TCP连接之门,负责HTTP响应报文的发送和请求报文的接收。
持续连接与非持续连接
非持续连接
- http1.0
- 假若服务器目前有一个html文件和10张图片需要响应,那么对于非持续连接分为以下几步
- http客户端通过80端向http服务端发起一条tcp连接
- 建立tcp连接后,http客户端将http请求报文通过80端口发送给http服务端
- http服务端进程通过套接字接收http请求报文,从存储器中读取响应的内容,并通过套接字发送给http客户端
- 服务端进程通知tcp断开tcp连接(要等http客户端接收到响应报文后才会真正断开)
- http客户端接收到响应报文,断开tcp连接
- 有几个对象就重复几遍1~5
- 建立tcp的过程还伴随有三次握手,http请求报文是随着第三次握手发送给http服务端的
持续连接
- http1.1
- 持续连接使得传输的对象能够在同一条tcp连接上进行。对于非持续连接,完成一个对象的请求和响应过程都需要2个RTT时间,客户端和服务端都要为每一条tcp连接分配缓存和变量,所以持续连接在一定程度上节约了时间
http报文格式
http请求报文格式

- 第一行为请求行,由方法字段、URL字段和协议版本组成
- 之后的行称为首部行

- 一般当请求报文的方法字段为GET时,实体体为空。当为POST时,通常以表单形式提交,实体体中的内容为表单中输入的值
- HEAD方法类似于GET方法。当服务器收到一个HEAD请求时,会使用HTTP报文作为响应,不过不会返回任何响应对象
- PUT方法。它允许用户上传对象到指定web服务器上的指定路径
- DELETE方法。它允许用户或应用程序删除web服务器上的指定对象
http响应报文格式

- 第一行为状态行,由协议版本、状态码和描述组成
- 之后的六行是首部行
- 最后一行是实体体
