声明
学习内容来自 B站 up 主《泷羽 sec》,如涉及侵权等问题,请及时联系,本人将马上删除文章。在此郑重声明,文章仅限于交流学习,任何其他违法行为与本人及泷羽 sec 无关。请务必遵守法律法规,切莫越过法律红线,否则后果自负(自学用,防忘记,不喜勿喷)。
http协议简介
HTTP协议是Hypertext Transfer Protocol(也称为超文本传输协议)的缩写,是用于从万维网(www:world wide web)服务器传输超文本到本地浏览器的传送协议
http协议工作于客户端-服务端(browser/sever)B/S架构上
浏览器作为http客户端通过ur!向http服务端即web服务器发送所有请求。web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP(超文本传输协议)经历了多个版本的发展,每个版本都在性能、功能和安全性等方面有所改进。
以下是对各个 HTTP 协议版本的全面介绍:
Http/0.9
HTTP/0.9是互联网早期版本的超文本传输协议(HTTP),被认为是最初的、基础的版本,用于在Web服务器和客户端(如Web浏览器)之间传输数据。它在1991年由Tim Berners-Lee引入,是HTTP协议的初版。以下是HTTP/0.9的主要特点和简介:
1. 单向请求-响应模型:
HTTP/0.9使用的是非常简化的请求-响应模型。客户端仅需发送一行请求(通常是GET
请求)来获取服务器上的资源。服务器响应时,会直接返回所请求的资源内容,且只支持纯文本的HTML文件。
2. 仅支持GET方法:
HTTP/0.9仅支持一种方法,即GET
,用于请求资源。没有其他HTTP方法,如POST
、PUT
或DELETE
等,这限制了它的功能,仅适合最基本的网页请求。
3. 无HTTP头部:
与后来的HTTP版本不同,HTTP/0.9不支持任何HTTP头部。服务器返回的响应中没有状态码或其他头部信息。这意味着客户端不会收到关于内容类型、长度或编码的任何信息。
4. 无状态:
HTTP/0.9是无状态协议,即每个请求都是独立的,与之前的请求或响应无关。它不保留任何会话信息,因此每次请求都是新的连接。
5. 简单性与局限性:
HTTP/0.9的优势在于其简单性,使其在早期的Web发展阶段易于实现和使用。然而,这种简化导致了功能上的极大限制。随着Web的发展,HTTP/0.9逐渐无法满足日益复杂的需求,如支持多种媒体格式和动态内容。
6. 过渡到HTTP/1.0:
由于HTTP/0.9的简单设计,Web应用的扩展性受到极大限制,因此在1996年发布的HTTP/1.0引入了许多新功能,如HTTP头部字段、支持多种请求方法、状态码和内容类型标识等,使HTTP协议更灵活和强大。
HTTP/1.0
HTTP/1.0是HTTP协议的第一个正式版本,发布于1996年,被详细描述在RFC 1945中。它是HTTP/0.9的继任者,解决了很多早期Web通信中的问题并引入了许多新的特性。以下是HTTP/1.0的详细介绍:
1. 请求/响应结构:
HTTP/1.0引入了标准的请求和响应结构,包括请求行、头部字段和消息体。这使得服务器和客户端之间的通信更加结构化和可扩展。一个典型的HTTP/1.0请求如下:
GET /index.html HTTP/1.0
Host: www.example.com
2. 支持多种请求方法:
HTTP/1.0扩展了可用的方法,不再仅限于GET
,而是增加了如POST
和HEAD
方法。
- GET:用于请求指定资源。
- POST:用于将数据发送到服务器,通常用于提交表单或上传文件。
- HEAD:类似于
GET
,但只返回响应的头部,不包括实际内容。
3. 响应头部与状态码:
HTTP/1.0引入了HTTP响应头部和状态码,使服务器能够传达关于请求的更多信息。常见的状态码包括:
- 200 OK:请求成功。
- 404 Not Found:请求的资源不存在。
- 500 Internal Server Error:服务器内部错误。
响应格式示例如下:
HTTP/1.0 200 OK Content-Type: text/html Content-Length: 1234 <html>...</html>
4. 头部字段:
HTTP/1.0允许使用多个头部字段来描述请求和响应的元数据。例如:
- Content-Type:指明响应数据的媒体类型,如
text/html
或application/json
。 - Content-Length:指明响应数据的字节长度。
- Expires:用于指定缓存过期时间。
5. 无连接特性:
HTTP/1.0是无连接协议,即在每次请求/响应完成后,客户端和服务器之间的连接就会关闭。这导致了每次请求都需要重新建立TCP连接,影响了性能和资源消耗。
6. 缓存控制:
HTTP/1.0引入了基础的缓存机制,如Expires
头部,帮助客户端缓存响应并减少请求服务器的频率。虽然该功能比较有限,但它为后续版本提供了缓存策略的基础。
7. 扩展性和局限性:
虽然HTTP/1.0较HTTP/0.9有了显著进步,但仍存在一些局限性,如:
- 每次请求新建连接:影响了性能,特别是对多资源(如页面上多个图像)请求的处理。
- 缺乏持久连接:客户端和服务器无法保持连接进行多次交互。
8. 过渡到HTTP/1.1:
由于这些局限性,HTTP/1.0在发布后不久就面临了扩展需求。HTTP/1.1在1997年被引入,提供了诸如持久连接(Connection: keep-alive
)、更细化的缓存控制和更多HTTP方法等改进。
HTTP/2
HTTP/2是HTTP协议的重大升级版本,于2015年由互联网工程任务组(IETF)发布,并被描述在RFC 7540。它旨在解决HTTP/1.1的性能问题,尤其是在页面加载速度和网络资源利用方面的限制。以下是HTTP/2的详细介绍:
1. 二进制分帧:
HTTP/2最显著的变化是引入了二进制分帧层。相比于HTTP/1.1的文本格式,HTTP/2通过二进制传输数据,将通信分为帧(frames),每个帧属于特定的数据流。这使得协议更易解析,并提高了性能和可靠性。
2. 多路复用:
HTTP/2支持多路复用,这意味着多个请求和响应可以同时通过一个TCP连接进行传输。无需为每个请求建立新的连接,减少了连接的开销和阻塞现象,提高了数据传输效率。这项特性显著提升了网页加载速度,尤其是在高延迟网络环境中。
3. 头部压缩:
HTTP/2采用了HPACK算法来压缩HTTP头部信息。HTTP/1.1的每个请求都会重复发送冗长的头部信息,而HTTP/2通过压缩减少了头部数据的冗余,进一步降低了带宽占用,提高了传输效率。
4. 服务器推送:
HTTP/2引入了服务器推送机制,使服务器在客户端请求一个资源时,可以主动向客户端发送额外的资源。例如,当客户端请求一个HTML文件时,服务器可以提前推送相关的CSS和JavaScript文件。这减少了往返请求的次数,优化了页面加载时间。
5. 持久连接:
HTTP/2继承了HTTP/1.1的持久连接特性,但将其进一步优化。通过一个连接即可处理多个请求和响应的同时传输,减少了TCP连接建立和关闭的开销,并避免了HTTP/1.1中的队头阻塞问题(head-of-line blocking)。
6. 流的优先级:
HTTP/2允许客户端为不同的流设置优先级,从而在带宽受限时更好地分配资源。这使得关键内容可以被优先加载,提升了用户体验。
7. 加密和安全:
虽然HTTP/2并不强制要求加密,但主流的浏览器实现都在HTTPS之上运行HTTP/2。这意味着在实践中,使用HTTP/2的连接通常是加密的,提供了更高的安全性。
HTTP/2的优点:
- 更快的加载速度:通过多路复用和头部压缩等机制,HTTP/2在加载网页时显著提升了速度。
- 减少延迟:服务器推送和持久连接减少了请求-响应往返时间。
- 更高的带宽利用率:通过单个连接并发处理多个请求,减少了网络开销。
与HTTP/1.1的对比:
- 多路复用:HTTP/1.1中每个连接只能处理一个请求,可能会导致“队头阻塞”,而HTTP/2解决了此问题。
- 二进制协议:HTTP/2使用二进制而非文本,简化了解析过程。
- 服务器推送:HTTP/1.1不具备这种主动推送资源的能力。
HTTP/3
HTTP/3是HTTP协议的最新版本,由IETF开发,并被描述在RFC 9114。它是在HTTP/2的基础上进行的改进,旨在解决其余下的性能问题,尤其是在网络不稳定或延迟较高的情况下。HTTP/3的核心变化是基于新的传输协议QUIC,而非传统的TCP。以下是HTTP/3的详细介绍:
1. 基于QUIC的传输协议:
HTTP/3建立在Google开发的QUIC协议之上,QUIC是一个在UDP之上构建的传输层协议,旨在替代TCP。QUIC提供了类似TCP的可靠性和流量控制,同时内置了TLS加密,减少了握手时延。HTTP/3因此能够快速建立连接并加快数据传输。
2. 解决队头阻塞问题:
HTTP/2虽然引入了多路复用,但仍受限于TCP的队头阻塞(head-of-line blocking)问题:一个数据包丢失会导致整个连接被阻塞,直到该包被重新传输。QUIC使用独立的流,每个流的丢包只会影响该流本身,不会影响其他流,从而解决了这一问题,提高了传输效率。
3. 更快的连接建立:
QUIC协议内置了TLS 1.3,这意味着加密和连接的握手可以在一次往返(1-RTT)内完成,从而比HTTP/2(基于TCP,需要多个往返来建立加密连接)更快。首次连接的速度明显提高,尤其在高延迟网络中表现更优。
4. 内置加密:
HTTP/3默认使用加密传输,所有的HTTP/3连接都使用QUIC的内置TLS 1.3加密,增强了数据安全性。这使得HTTP/3天生安全,无需额外配置HTTPS。
5. 改进的多路复用:
HTTP/3的多路复用架构更加高效,通过独立的流处理避免了HTTP/2中的队头阻塞问题,每个数据流的单独管理进一步提升了并发传输的能力和性能。
6. 更好的丢包恢复:
QUIC提供了更高级的丢包恢复机制,避免了传统TCP的重传延迟。QUIC的流量控制和丢包处理能快速适应网络状况,提高了在丢包率较高的网络中的性能。
7. UDP的灵活性:
由于HTTP/3基于UDP,这使其比TCP更加灵活和适应不同的网络环境。UDP允许QUIC和HTTP/3开发者实现自定义的流量控制和拥塞控制机制,从而进一步优化网络性能。
HTTP/3的优点:
- 减少连接建立时间:基于QUIC协议的1-RTT或0-RTT握手加快了初始连接速度。
- 更好的性能:消除了队头阻塞问题,改进了高延迟和丢包环境下的性能。
- 内置安全性:所有连接默认加密,提升了整体网络安全。
与HTTP/2的对比:
- 传输协议:HTTP/2基于TCP,HTTP/3基于QUIC(UDP)。
- 队头阻塞:HTTP/2在TCP层次仍会受到队头阻塞的影响,而HTTP/3使用QUIC避免了此问题。
- 连接速度:HTTP/3通过QUIC实现更快的连接建立和数据传输。
部署与支持:
由于HTTP/3依赖UDP,有时需要服务器和防火墙进行额外的配置来支持QUIC协议。许多主流浏览器(如Chrome、Firefox、Edge)和大型互联网服务(如Google、Facebook、Cloudflare)已经实现并支持HTTP/3。随着更多的网络基础设施升级,HTTP/3的普及率预计会继续上升。
HTTP协议有多种请求方法
1.GET
用途:用于请求指定的资源。这是最常见的请求方法,当你在浏览器中输入网址并访问时,通常会发送 GET 请求。特点:
GET 请求可以被缓存,除非指定了特定的缓存控制头部。GET 请求的参数通常附加在 URL 中,这使得它们可以被轻松地分享和书签,但也可能会暴露敏感信息,并且有长度限制。GET 请求是安全的,即它不会对服务器上的资源进行修改。
2.POST
用途:
通常用于向服务器提交数据,以创建或更新资源。例如,在提交表单、上传文件等场景中经常使用。
特点:
POST 请求的数据通常放在请求体中,而不是 URL 中,因此可以传输更大量的数据,并且相对更安全,不容易暴露敏感信息。POST 请求一般不会被缓存
3.PUT
用途:用于更新服务器上的资源,PUT请求通常会将整个资源进行替换。
特点:PUT请求是幂等的,即多次发送相同的PUT请求应该产生相同的结果
4.DELETE
用途:用于删除服务器上的指定资源
特点:DELETE 请求也是幂等的,多次删除同一个资源应该产生相同的结果,即资源被删除后再次删除不会产生错误
5.HEAD
用途:与 GET 请求类似,但只返回头部信息,不返回资源的主体内容
特点:可以用于检查资源的存在性、获取资源的元信息(如最后修改时间、内容长度等而无需下载整个资源,,从而节省带宽和时间。
6.OPTIONS
用途:
用于获取服务器支持的 HTTP 请求方法和其他选项。
特点:客户端可以通过 OPTIONS 请求了解服务器对特定资源的访问权限和支持的操作。
7.TRACE
用途:用于诊断和调试,客户端可以发送 TRACE 请求来查看请求在网络中经过的路径
特点:通常在开发和测试环境中使用,以了解请求的处理过程。这些请求方法为客户端与服务器之间的交互提供了丰富的方式,使得 Web 应用能够实现各种不同的功能。
HTTP协议 url
https://www.baidu.com/web/579.html?replytocom=22#respond
协议 ://域名:端口/虚拟目录/文件名?参数#锚点
HTTP协议 常见的状态码
1.1xx 信息性状态码
100 Continue:表示目前为止一切正常,客户端可以继续发送请求或者忽略这个响应。一般在客户端发送 POST 请求时,当请求体较大,服务器可能先返回这个状态码,表示可以继续发送请求体
2.2xx 成功状态码
200 OK:最常见的成功状态码,表示请求已成功,服务器已成功返回请求的数据。
201 Created:表示请求已成功,并在服务器上创建了新的资源。通常在 POST 请求用于创建资
源时返回。
204 No Content:表示请求已成功处理,但没有返回任何内容。通常用于PUT或 DELETE 请求成功
,表示资源已被更新或删除。
3.3xx 重定向状态码
301 Moved Permanently:表示请求的资源已被永久移动到新的 URL,客户端应使用新的 URL 进行后续请求
302 Found:表示请求的资源临时被移动到了另一个 URL,客户端应继续使用原有 URL 进行请求,但可以根据响应中的 Location 头部字段进行重定向。
304 Not Modified:
表示资源未被修改,客户端可以使用缓存的版本。通常在客户端发送条件请求如带有 |f-Modified-Since 或If-None-Match 头部)时返回。
4.客户端错误状态码4xx
400Bad Request:表示客户端发送的请求有语法错误或无法被服务器理解。
401Unauthorized:表示请求需要用户认证,通常是因为客户端没有提供有效的身份验证凭证403Forbidden:表示服务器理解请求,但拒绝执行,通常是因为客户端没有足够的权限访问资源
404 Not Found:表示服务器无法找到请求的资源。
405Method Not Allowed:表示请求的方法不被允许,例如使用了不支持的 HTTP 方法请求某个资源
5.服务器错误状态码5xx
500Internal Server Error 表示服务器在处理请求时发生了内部错误,通常是服务器端的程序出现了异常。
502Bad Gateway:表示作为网关或代理的服务器在尝试执行请求时,从上游服务器接收到无效的响
503Service Unavailable:表示服务器暂时无法处理请求,通常是由于服务器过载或正在进行维护。504Gateway Timeout:表示作为网关或代理的服务器在等待上游服务器响应时超时。
内网(局域网)
定义:
内网通常是指一个组织或机构内部的网络,它的范围相对较小,一般局限于一个办公室、一栋楼或者一个企业园区内。
特点:
较高的安全性:由于内网与外部网络相对隔离,外部用户难以直接访问内网资源因此内网通常具有较高的安全性。可以通过设置访问控制策略、防火墙等措施来进一步加强安全防护。
高效的资源共享:内网中的设备可以方便地共享文件、打印机、数据库等资源提高工作效率。例如,在企业内部,员工可以快速访问共享的文档和数据,进行协作办公。
稳定的网络性能:内网的网络性能相对稳定,因为它的用户数量和流量通常是可控的。可以通过优化网络架构、配置合适的网络设备来确保内网的高速稳定运行。
用途:企业办公:企业内部的员工可以通过内网进行文件共享、邮件通信、办公自动化等工作。例如,使用企业内部的办公软件进行项目管理、流程审批等。
学校教学:学校可以建立内网为师生提供教学资源共享,在线学习等。例如,提交作业或进行在线审批和成绩管理
医疗机构:医院内部的医疗系统通常运行在内网上,以确保患者信息的安全和医宁业务的稳定进行。例如,医生可以在内网上查看患者病历、开具处方,护士可以进行护理记录和医嘱执行
外网 (广域网)
定义:外网是指连接全球各地的网络通常由互联网服务提供商(ISP)提供接入服务外网的范围非常广泛,可以覆盖全球各个角落。
特点:开放性:外网是开放的,任何人都可以通过合适的方式接入外网,获取各种信息和服务。但这也带来了一定的安全风险,如网络攻击、信息泄露等。丰富的资源:外网上拥有海量的信息和服务资源,用户可以通过搜索引擎、社交媒体、电子商务等平台获取各种所需的信息和服务。例如,在网上购物、查询新闻、观看视频等。
动态性:外网的网络环境是动态变化的,网络流量、用户行为等因素都会影响外网的性能和稳定性。因此外网的服务质量可能会有所波动。
用途:信息获取:用户可以通过外网获取各种新闻、知识、娱乐等信息。例如,通过搜索引擎查询资料,阅读在线新闻,观看电影和电视剧等
社交互动:外网提供了各种社交平台,用户可以与朋友、家人、同事等进行交流,进行在线聊天和视频通话等。和互动。例如,使用社交媒体发布动态、分享照片
电子商务:用户可以通过外网进行在线购物、支付等电子商务活动。例如,在网上购买商品、预订旅游服务、缴纳水电费等。
公网和私网地址在内网划分骑着重要作用
1.公网地址
定义:
公网地址也称为全球唯- IP 地址,是由互联网服务提供商(ISP)分配给用户的可以在全球互联网上被唯一识别的地址。
特点:
全球唯一性:公网地址在全球范围内是唯一的,不同的设备不能拥有相同的公网
可路由性:公网地址可以在互联网上被路由,使得不同网络中的设备可以相互通信。
有限性:由于 IPv4 地址资源有限,公网地址的数量也是有限的。随着互联网的发展,公网地址的需求不断增加,导致公网地址资源日益紧张。
用途:服务器托管:如果企业或个人需要将自己的服务器托管在数据中心,就需要使用公网地址,以便让全球用户都能够访问到服务器上的服务。
网站建设:网站服务器需要公网地址才能被互联网上的用户访问。
远程办公:对于需要远程访问公司内部网络资源的员工,公司可以为其分配公网地址,以便通过 VPN 等技术实现远程访问。
2.私网地址(内网地址)
定义:
私网地址也称为本地IP 地址,是在一个组织或机构内部使用的IP 地址,不能在全球互联网上被直接访问。
特点:
可重复使用:私网地址可以在不同的组织或机构内部重复使用,因为它们不会在全球互联网上被路由。
灵活性:私网地址的分配可以由组织或机构内部自行管理,具有较高的灵活性
安全性:由于私网地址不能在全球互联网上被直接访问,因此可以提高网络的安全性,减少外部攻击的风险。
用途:
企业内部网络:企业可以使用私网地址构建自己的内部网络,实现内部设备之间的通信和资源共享。
家庭网络:家庭用户可以使用私网地址构建自己的家庭网络,连接多台设备,如电脑、手机、智能电视等,
无线网络:无线接入点(如无线路由器)通常会为连接的设备分配私网地址,以便在家庭或企业内部实现无线网络覆盖。
常见的私网地址范围包括:
10.0.0.0 - 10.255.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
总之,网地址和私网地址在网络中都有各自的用途。公网地址用于在全球互联网上进行而私网地址则用于在组织或机构内部构建本地网络。在实际应用中,需要根据具体情况合理分配和使用公网地址和私网地址,以满足不同的网络需求。