HTTP协议

2021/6/30 23:21:09

本文主要是介绍HTTP协议,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

HTTP协议为超文本传输协议,定义了客服端和服务器端交互的方式,使用TCP作为支撑运输协议,服务器端不保存客户的任何信息,属于无状态协议

1、持续连接与非持续连接

  1. 非持续连接:每个请求/响应对是经一个单独的TCP连接发送
  2. 持续连接:所有的请求/响应对是经相同的TCP连接发送

持续连接是默认方式

     两种方式的响应时间,比如有x个对象

  1. 非持续连接:每个对象首先需要建立连接,三次握手(第三次握手客户端可以携带请求数据)加上服务器的响应为2个RTT,每个对象都是这样,所以响应时间为2x个RTT
  2. 持续连接,除了第一个对象为2个RTT,后面的每个对象都为1个RTT,所以总的响应时间为2+x-1个RTT,响应时间基本上是非持续连接的一半

2、请求报文和响应报文

2.1 请求报文

请求报文的格式为

<request-line> //请求行
<headers> //首部行
<blank line> //空行
<request-body> //请求体

具体例子

POST /user HTTP/1.1      //请求行
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
User-agent: Mozilla/5.0.      //以上是首部行
(此处必须有一空行)  //空行分割header和请求内容 
name=world   请求体
  1. 请求行:请求方法+url+http版本号(说明浏览器实现的版本)
  2. 首部行:
Host:是条件get的一个字段,用于代理服务器检查自己的缓存是否被修改(条件get的首部行)
Content-Type:报文体内容类别
Connection:使用持续连接还是非持续连接
User-agent:用户代理,服务器根据用户代理的版本发送相同对象的不同版本

2.2 响应报文

响应报文格式

status-line   //状态行
headers   //消息报头
blank line   //空行
response-body   //响应体

具体例子

HTTP/1.1 200 ok
Date:
Server: Apache/2.2.3(Centos)
Last-Modified: 
Content-Length:
Content-Type:
空行
实体体
  1. 状态行:HTTP版本号+状态码+响应的状态信息
  2. 首部行:
Server:指示该报文是Apache代理服务器产生的
Content-Length:被发送对象的长度
Date:服务器从它的文件系统中检索到该对象并插入到报文中的时间
Last-Modified:对象最后一次被修改的时间

3、Web缓存

      Web缓存器也叫代理服务器,用于代表服务器满足HTTP请求的网络实体。该服务器保存最近请求过的对象副本。通常由ISP购买并安装。有了该服务器,一个HTTP请求的过程

  1. 客户端向服务器端发送请求,首先向代理服务器发送请求
  2. 如果该服务器中缓存了响应,并且客户端没有使用条件GET方法服务器端没有修改该响应报文,直接向客户端发送响应报文
  3. 如果代理服务器中没有缓存,代理服务器向服务器发送请求,收到响应后保存副本,并向客户端发送副本
  4. 如果客户端使用了条件get方法,即在请求报文中加上If-Modified-Since首部行,代理服务器会向服务器发送请求报文,看对象是否在这个时间后被修改过,如果被修改后则将修改后的对象发送过来,如果没有修改过,则发送实体体为空的响应报文

使用Web缓存的优点

  1. 减少客户的响应时间
  2. 减少机构接入链路到因特网的通信量


这篇关于HTTP协议的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程