HTTP协议
2021/6/30 23:21:09
本文主要是介绍HTTP协议,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
HTTP协议为超文本传输协议,定义了客服端和服务器端交互的方式,使用TCP作为支撑运输协议,服务器端不保存客户的任何信息,属于无状态协议。
1、持续连接与非持续连接
- 非持续连接:每个请求/响应对是经一个单独的TCP连接发送
- 持续连接:所有的请求/响应对是经相同的TCP连接发送
持续连接是默认方式
两种方式的响应时间,比如有x个对象
- 非持续连接:每个对象首先需要建立连接,三次握手(第三次握手客户端可以携带请求数据)加上服务器的响应为2个RTT,每个对象都是这样,所以响应时间为2x个RTT
- 持续连接,除了第一个对象为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 请求体
- 请求行:请求方法+url+http版本号(说明浏览器实现的版本)
- 首部行:
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: 空行 实体体
- 状态行:HTTP版本号+状态码+响应的状态信息
- 首部行:
Server:指示该报文是Apache代理服务器产生的 Content-Length:被发送对象的长度 Date:服务器从它的文件系统中检索到该对象并插入到报文中的时间 Last-Modified:对象最后一次被修改的时间
3、Web缓存
Web缓存器也叫代理服务器,用于代表服务器满足HTTP请求的网络实体。该服务器保存最近请求过的对象副本。通常由ISP购买并安装。有了该服务器,一个HTTP请求的过程
- 客户端向服务器端发送请求,首先向代理服务器发送请求
- 如果该服务器中缓存了响应,并且客户端没有使用条件GET方法服务器端没有修改该响应报文,直接向客户端发送响应报文
- 如果代理服务器中没有缓存,代理服务器向服务器发送请求,收到响应后保存副本,并向客户端发送副本
- 如果客户端使用了条件get方法,即在请求报文中加上If-Modified-Since首部行,代理服务器会向服务器发送请求报文,看对象是否在这个时间后被修改过,如果被修改后则将修改后的对象发送过来,如果没有修改过,则发送实体体为空的响应报文
使用Web缓存的优点:
- 减少客户的响应时间
- 减少机构接入链路到因特网的通信量
这篇关于HTTP协议的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14后台交互资料入门指南
- 2024-11-14如何轻松创建项目环境:新手入门教程
- 2024-11-14如何抽离公共代码:初级开发者指南
- 2024-11-14Python编程入门指南
- 2024-11-14Python编程入门:如何获取参数
- 2024-11-14JWT 用户校验:简单教程与实践
- 2024-11-14Pre-commit 自动化测试入门指南
- 2024-11-14Python编程基础
- 2024-11-14Server Action入门教程:轻松掌握服务器操作
- 2024-11-14Server Component入门教程:轻松搭建服务器组件