浅读 HTTP

简介: 浅读 HTTP

前言


HTTP,全称是 Hyper Text Transfer Protocol,译为“超文本传输协议”(超文本转移协议)。


正文


在很久很久以前,人们为了在世界范围内轻松知识共享,提出了 Web(World Wide Web)的概念。简单来说,就是在 Web 浏览器的地址栏输入 Web 页面对应的 URL,Web 浏览器从 Web 服务器端获取到文件资源等信息,从而显示出 Web 页面。它使用 HTTP 协议为规范,完成在客户端与服务端一系列的运作流程。

最初,HTTP 协议出现是为了解决文本传输的难题。但由于协议本身非常简单,现在 HTTP 协议已经超出了 Web 这个框架,被运用到各种场景里。

尽管我们常说,在 Web 中客户端与服务器端是通过 HTTP 协议进行通信的,但不代表这个通信的全过程都由 HTTP 就能完成的。

通常使用的的网络是在 TCP/IP 协议簇的基础上运作的,而 HTTP 属于它内部的一个子集。


概念


协议(Protocol)


在计算机与网络设备进行通信,双方需要基于相同的方法。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则,这种规则被称为“协议”。


TCP/IP 协议(簇)


TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇(Protocol Suite,也有译作“协议族”)。TCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指由 FTP、SMTP、TCP、IP 等协议构成的协议簇。由于在 TCP/IP 协议中 TCP 协议和 IP 协议最具代表性,因此被称为 TCP/IP 协议。


计算机网络体系结构分层


OSI(Open System Interconnect)七层模型:

28.webp.jpg


OSI 七层模型与 TCP/IP 四层模型的区别:


27.webp.jpg


OSI 七层模型:

应用层(Application Layer)
    网络服务与最终用户的一个接口。
    协议有:HTTP、FTP、TFTP、SMTP、SNMP、DNS、TELNET、POP3、DHCP 等。
表示层(Presentation Layer)
    数据的表示、安全、压缩。
    格式有 JPEG、ASCII、EBCDIC、加密格式等。
会话层(Session Layer)
    建立、管理、终止会话。
    对应主机进程,指本地主机与远程主机正在进行的会话。
传输层(Transport Layer)
    定义传输数据的协议端口号,以及流控和差错校验。
    协议有:TCP、UDP,数据包一旦离开网卡即进入网络传输层。
网络层(Network Layer)
    进行逻辑地址寻址,实现不同网络之间的路径选择。
    协议有:ICMP、IGMP、IP(IPv4、IPv6)。
数据链路层(Data Link Layer)
    建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)
    将比特组合层字节进而组合成帧,用 MAC 地址访问介质,错误发现但不能纠正。
物理层(Physical Layer)
    建立、维护、断开物理连接。(由底层网络定义协议)


TCP/IP 四层模型:


TCP/IP 协议簇按层次分别分为:应用层、传输层、网络层和数据链路层。

应用层:
    应用层决定了向用户提供应用服务时通信的活动。
    TCP/IP 协议簇内预设了各类通用的应用服务。比如:FTP、DNS 服务就是其中两类。
    HTTP 协议也处于该层。
传输层:
    传输层对应上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
    在传输层有两个性质不同的协议:TCP 和 UDP。
网络层(网络互连层):
    网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
    与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输线路。
链路层(数据链路层、网络接口层)
    用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(网络适配器,即网卡)、及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。


三、HTTP


HTTP 状态码

2XX(成功)
    200 OK:表示请求在服务端被正常处理了。
    204 No Content:表示请求已正常处理,但在返回的响应报文中不含实体的主体部分。
    206 Partial Content:表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。
3XX(重定向)
    301 Moved Permanently:表示永久重定向。它会按照响应报文的 Location 字段重新发起请求。
    302 Found:表示临时重定向。与 301 相似,但它只是临时性质的,换句话说,资源对应 URI 未来还有可能发生改变。
    303 See Other:表示请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。
    304 Not Modified:表示服务器端资源未发生改变,可直接使用客户端未过期的缓存。尽管 304 被划分在 3XX 类别中,但它和重定向没有关系。
    307 Temporary Redirect:临时重定向,与 302 Found 有着相同的含义。但它不会从 POST 变成 GET。
4XX(客户端错误)
    400 Bad Request:表示请求报文中存在语法错误。
    401 Unauthorized:表示用户认证失败,即请求需要有认证信息。
    403 Forbidden:表示对请求资源的访问被服务器拒绝了。
    404 Not Found:表示服务器上无法找到请求的资源。
5XX(服务器错误)
    500 Internal Server Error:表示服务器端在执行 请求时发生了错误。
    503 Service Unavailable:表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。


HTTP 报文

报文首部
空行
报文主体
报文首部分为:请求报文首部、响应报文首部
请求报文包括:请求行、首部字段(请求首部字段、通用首部字段、实体首部字段)、其他
响应报文包括:状态行、首部字段(响应首部字段、通用首部字段、实体首部字段)、其他
请求行:由方法、URI、HTTP 版本组成
状态行:由HTTP 版本、状态码(数字和原因短语)组成


未完待续...


目录
相关文章
|
24天前
|
存储 人工智能 Java
官宣 | Apache Fluss (Incubating) 0.8 发布公告
Apache Fluss 0.8(孵化中)正式发布!作为进入Apache后的首个版本,全面增强湖流一体能力,支持Iceberg与Lance,引入Delta Join、动态配置、Materialized Table等核心特性,显著提升稳定性与性能,推动实时流处理迈向新阶段。
175 3
|
26天前
|
安全 Ubuntu 应用服务中间件
基于code-server的云端编程环境部署
本文档描述如何在 Ubuntu 主机上部署 code-server(即“网页版 VS Code”),并通过 autossh 将服务反向隧道到跳板机、使用 Nginx 反向代理域名访问、以及使用 certbot 配置 HTTPS。适合在多设备间共享同一开发环境、并解决个人主机动态公网 IP 的访问问题。
458 5
|
27天前
|
人工智能
选AI建站 限时送.CN域名活动规则
即日起至2025年12月31日,购买万小智AI建站或云·企业官网产品,可免费注册1个.cn英文域名(限首年)。需在购后72小时内于控制台领取,仅限阿里云会员参与。域名续费按市场价收取,不支持转让及非正常手段获取权益。活动规则可能调整,请以页面为准。
|
Go Python
使用python实现一个用户态协程
【6月更文挑战第28天】本文探讨了如何在Python中实现类似Golang中协程(goroutines)和通道(channels)的概念。文章最后提到了`wait_for`函数在处理超时和取消操作中的作
228 1
使用python实现一个用户态协程
|
存储 安全 API
权限设计种类【RBAC、ABAC】
权限设计种类【RBAC、ABAC】
1978 2
|
运维 Linux
Linux系统调优详解(五)——磁盘IO状态查看命令
Linux系统调优详解(五)——磁盘IO状态查看命令
493 5
|
关系型数据库 MySQL 网络安全
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
这篇文章提供了解决Navicat无法连接腾讯云服务器上MySQL问题的步骤,包括调整防火墙设置、更新MySQL权限和检查远程连接配置。
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
|
调度
cron表达式都有那些?
【10月更文挑战第12天】cron表达式都有那些?
346 2
|
Dart Android开发 开发者
Flutter跨平台开发实战:构建高性能移动应用
【10月更文挑战第25天】随着移动设备种类的增加,开发者面临跨平台应用开发的挑战。Flutter作为Google推出的开源UI工具包,凭借其强大的跨平台能力和高效的开发效率,成为解决这一问题的新方案。本文将介绍Flutter的核心优势、实战技巧及性能优化方法,通过一个简单的待办事项列表应用示例,帮助读者快速上手Flutter,构建高性能的移动应用。
297 0