图解HTTP(二)

转自码农code之路

一、HTTP协议用于客户端和服务器之间的通信

HTTP协议和TCP/IP协议族内的其他众多协议相同,用于客户端和服务器端之间的通信。

通过请求和响应的交换达成通信:

请求和响应

HTTP协议规定,请求从客户端发出,最后服务器响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。

下面看一个具体是实例:

请求报文:起始行开头的GET表示请求服务器的类型,称为方法。随后的字符串/index.html指明了请求访问的资源对象,也叫做请求URI。最后的HTTP/1.1,即HTTP的版本号,用来提示客户端使用的HTTP协议功能。

综合来看,这段请求的内容是:请求访问某台HTTP服务器上的/index.html页面资源。

扫描二维码关注公众号,回复: 5062799 查看本文章

请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。也就是俗称的请求行、请求头、请求体。

响应报文:

在起始行开头的HTTP/1.1,表示服务器对应的HTTP版本。

紧挨着的200 OK表示请求的处理结果的状态码和原因短语。下一行显示了创建响应的日期时间,是首部字段内的一个属性。

紧挨着以一个空行分隔,之后的内容称为资称为体的主体。

响应报文基本是由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。也可以简单理解为响应行、响应头、响应体。

二、HTTP协议是不保存状态的协议

HTTP协议是一种无状态协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。

使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产生。这是为了更快的处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成如此简单的。

HTTP/1.1虽然是无状态协议,但为了实现期望的保存状态功能,于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。

三、请求URI定位资源

HTTP协议使用URI定位互联网上的资源。

当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内。

除此之外,如果不是访问特定资源而是对服务器本身发起请求,可以用一个*来代替请求URI。

四、告知服务器意图的HTTP方法

①GET:获取资源。

②POST:传输实体主体。

③PUT:传输文件。

④HEAD:获得报文首部。

⑤DELETE:删除文件。

⑥OPTIONS:询问支持的方法。

⑦TRACE:追踪路径。

⑧CONNECT:要求用隧道协议连接代理。

五、使用方法下达命令

向请求URI指定的资源发送请求报文时,采用称为方法的命令。

方法的作用在于,可以指定请求的资源按期望产生某种行为。方法中GET、POST、HEAD等。

注意:方法名区分大小写,要用大写字母。

下表列出了HTTP/1.0和HTTP/1.1支持的方法:

六、持久连接节省资源

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。

但是此种设计在使用浏览器浏览一个包含多张图片的HTML页面时就会造成无畏的TCP连接建立和断开,因为在发送该请求方法HTML页面资源是同时,也就请求该HTML页面里包含的其他资源。

持久连接:

为了解决TCP连接的问题,HTTP/1.1和一部分的HTTP/1.0想出了持久连接(也称HTTP keep-alive)的方法。持久连接的特定是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

持久连接的好处在于减少了TCP连接的重复建立和断开造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分十几件,使HTTP请求和响应能够更早地结束,这样web页面的显示速度也就相应提高了。

在HTTP/1.1中,所有的连接默认都是持久连接。

管线化:

持久连接使得多数请求以管线化方法发送称为可能。

从前发送请求后需等待并接收响应,才能发送下一个请求。管线化技术出现后,不用等待响应就可以直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个的等待响应了。

七、使用Cookie的状态管理

假设要求登录认证的web页面本身无法进行状态的管理,那么每次跳转新页面而不需要再次登录,就是要在每次请求报文中附加参数来管理登录状态。

保留无状态协议这个特征 的同时又要解决类似的矛盾,于是引入了Cookie技术。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端自动在请求报文中加入Cookie值后发送出去。

服务端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

Cookie交互情景

猜你喜欢

转载自blog.csdn.net/Walker_zmc/article/details/86638314