HTTP协议详解
1. HTTP协议简介
HTTP协议,俗称超文本传输协议,是一种用于分布式、协作式的超媒体信息系统的应用层协议,是万维网的数据通信的基础。目前存在着HTTP1.0、HTTP1.1和HTTP2.0。
HTTP1.0的特点:
1. 一次TCP连接只能处理一个请求,响应结束,连接立即关闭,长连接需要手动设置keep-alive参数来建立;
2. 不支持发送header信息,造成浪费带宽的现象,并且不支持断点续传功能;
3. 不存在host域,在1.0中认为每台服务器都绑定一个唯一的IP地址。
3. 判断缓存的标准只有if-Modified-Since和Expires,太单一。
HTTP1.1的特点:
1. 支持长连接,默认开启keep-alive,即连接不会立即断开,而是在指定的时间内没有请求或响应时才会断开,一个TCP连接可以传送多个HTTP请求和响应。
2. 支持发送header信息,如果服务器确认客户端有权限请求,则开始发送body体,否则不需要发送body,一定程度上节约了带宽。
3. 存在host域,即服务器上可以存在多个虚拟主机,他们共享一个IP地址,客户端请求的时候必须带上host域。
4. 缓存处理标准更多,1.1引入Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
5. 新增了24个错误状态响应码,更加利于错误通知的管理。
HTTP2.0的特点:
1. 多路复用,可以在同一个TCP连接并发处理多个请求,相比1.1创建多TCP来处理并发请求的方法,节约了创建TCP连接的成本开销;
2. 头部数据压缩,2.0使用HPACK算法对header的数据进行压缩,数据体积小,传输速度更快;
3. 服务器推送资源,在1.1中只有客户端发送请求,服务器才会进行响应,不存在服务器没有收到请求而去自动发送响应,这种机制有时候会造成很大的延迟,2.0引入server push,它允许服务器在浏览器请求之前推送资源给浏览器,这样客户端就可以直接从本地加载资源,更加快速。
2. HTTP协议概述
HTTP是客户端到服务端请求和响应的标准。客户端通过使用浏览器、网络爬虫或者其他工具,向服务器发起一个HTTP请求(请求报文中包括请求的方法、URL、版本协议、请求头部和请求数据),然后TCP进行三次握手来创建连接,服务器监听到客户端发送过来的请求,给客户端返回一个响应(响应中包括协议版本、响应状态、服务器信息、响应头部和响应数据)。
3. HTTP的工作原理
1. 浏览器通过URL域名向服务器发送一个请求,请求中包含请求行、请求头部、空行和请求数据四个部分;
2. 在应用层中首先通过DNS协议解析域名,获取对应的IP地址;
3. 解析出IP地址后,根据IP和服务器默认端口号80,由传输层的TCP协议向服务器发出三次握手,建立连接;
4. 服务器监听到浏览器的请求后,做出响应,并发请求的资源发送给浏览器;
5. 响应结束,释放TCP连接;
6. 浏览器接收数据并进行相应操作。
4. HTTP的特点:
1. 无状态保存
HTTP是一种不保存状态,即无状态协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。即每一次连接都是新的,和上一次连接没有任何关联。因为请求—响应机制,没发生一次请求,就伴随着一次响应,为了更大效率的处理大量事务(一次HTTP请求过程称为事务),HTTP协议本身不保留之前一切的请求或响应报文的信息。但是随着互联网业务不断发展,很多场景需要保存浏览器的状态,HTTP1.1于是引入了Cookie技术,浏览器可以通过Cookie来管理状态,但是它还是属于无状态协议。
2. 无连接
无连接的含义是每次连接只能处理一个请求,服务收到请求并做出响应后,连接自动断开。这种方式的好处是每次完成请求后,服务器和客户端的连接就断开了,可以提高并发性能。无连接分为两种方式:一种是1.0版本时候的服务器响应请求之后,连接就直接断开了;另一种是1.1版本他们之间的连接并不是直接断开,而是等个几秒钟,在这时间内,如果客户端有后续的请求,则在原来的连接通道继续来收发消息,如果客户端没有发送新的请求,则连接断开,这样的好处是减少了短时间内建立连接的次数,提高了效率,因为TCP建立连接也是需要耗时的。
3. 明文传输数据
HTTP是相对来说,安全性较低,web浏览器和服务器之间的数据传输,是以一种明文的方式进行,不经过任何加密的手段,他会将信息携带在URL地址中,一些重要的信息很容易被人获取到,它的传输的速度快,但是安全性较低。
5. HTTP常用的请求方法
1. get 用于向服务器请求数据
2. post 向服务器提交数据处理请求
3. head 类似get请求,用于请求报文头,不包含响应体
4. put 提交修改数据请求,覆盖式修改,即取代指定的内容
5. patch 提交修改数据请求,不会覆盖式修改,即作局部更新
6. delete 请求服务器删除指定的数据
7. options 返回服务器对特殊资源支持的请求方式或查看服务器的性能
8. trace 回显服务器收到的请求,主要用于测试或者诊断
6. HTTP常见的状态码
100:客户端应继续进行请求,即服务器已接收到第一部分,正等待后续请求(继续请求)
101:客户端要求服务器求换协议,服务器已确认并准备切换(切换协议)
200:请求成功,最常见的状态码(成功)
201:请求成功并创建了新的资源(创建新的资源)
202:服务器接受请求,但未处理(接受但未处理)
204:服务器成功处理了请求,但是未返回任何内容(为返回内容)
206:服务器成功处理了部分请求(部分内容)
301:请求的资源被永久移动到了新的URL(永久移动)
302:请求的资源被临时移动,可以继续使用原来的URL(临时移动)
304:请求的内容未进行修改,返回的是之前网页缓存中的内容(内容未改变)
305:客户端只能使用代理的方式访问请求的内容(代理请求)
307:服务器从不同的位置的网页响应请求,应继续使用原有位置进行请求(临时重定向)
308:请求地址被重定向,需要使用新的URL地址发送请求(永久重定向)
400:服务器不理解请求的语法(语法错误)
401:需要进行身份认证才能进行请求(未授权)
403:服务器拒绝请求(拒绝)
404:网页未找到(URL地址错误)
407:客户端需要使用代理进行请求(代理清理)
408:服务器等候请求时发生超时(请求超时)
410:请求的资源被永久删除(资源删除)
413:请求体过大,服务器无法处理请求(请求实体过大)
414:请求的URL过长,服务器无法处理(URL过长)
500:服务器发生错误,无法完成请求(服务器内部错误)
502:错误网关
503:服务器暂时不可用
504:网关超时
505:服务器不支持请求的HTTP协议版本
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律