Linux:网络编程-HTTP 协议

目录

[1. HTTP协议介绍](#1. HTTP协议介绍)

[2. HTTP传输(基于TCP的协议)的流程](#2. HTTP传输(基于TCP的协议)的流程)

2.1客户端发起TCP连接:

2.2客户端发送HTTP请求报文:

[请求行中的方法(如GET、POST)指明了操作意图,具体方法介绍如下。 ​编辑​编辑](#请求行中的方法(如GET、POST)指明了操作意图,具体方法介绍如下。 编辑编辑)

2.3服务器处理并响应:

2.4关闭或复用连接:

3.数据处理

4.总结


HTTP协议是现代互联网通信的基石,从浏览网页到调用API,无处不在。理解HTTP是进行网络应用开发的必备知识。本文将介绍HTTP协议的基本概念与一次完整HTTP传输的流程。

1. HTTP协议核心概念介绍

  • WWW:基于互联网的信息服务系统,通过 HTTP 协议传输超文本数据,用户可通过浏览器访问各类网页资源;

  • HTTP (HyperText Transfer Protocol):基于请求 - 响应模型的无状态协议,一种超文本传输协议 。它属于TCP/IP模型中的应用层协议 ,定义了客户端(如浏览器)与服务器之间交换数据的格式和规则,是万维网(WWW)的核心通信协议。

  • 超文本 (HyperText)的概念超越了纯文本,它将文字、图片、视频、超链接等多种媒体资源整合在同一个文件(如网页)中,形成一个相互关联的信息网络。最常见的超文本格式就是 HTML(HyperText Markup Language)(利用HTTP可以实现网页的上传和下载)。

  • HTML :超文本标记语言,是网页的核心描述语言,通过标签定义网页的结构与内容,浏览器解析 HTML 后渲染为可视化页面。

  • URL (Uniform Resource Locator,统一资源定位符):要访问网络上的资源,我们需要一个地址,这就是 URL。一个典型的URL格式如下:

    协议://主机[:端口]/资源路径[?查询参数]

例如:https://www.example.com:443/blog/index.html,其中:

  • 协议https(基于TLS加密的HTTP,编程需安装curl库和用于加密的opensll库) or http协议,这两种常用

  • 主机www.example.com(服务器域名或公有IP地址)【域名会经DNS服务器转换为 IP地址】【根据IP地址定位主机】

  • 端口443(HTTPS默认端口,通常可省略)(80或8080是HTTP默认端口,通常可省略)【根据IP地址定位主机上的应用程序】

  • 资源路径/blog/index.html(请求资源在服务器上的位置,在哪个目录。默认为gen'mu'l)

2. HTTP传输(基于TCP的协议)的流程

HTTP本身并不负责数据传输,它依赖于可靠传输层协议 TCP。一个完整的HTTP事务流程如下:

2.1客户端发起TCP连接

(服务器一直在监听TCP连接)HTTP客户端(如浏览器、curl命令或你的程序)根据URL中的主机和端口,向HTTP服务端发起TCP三次握手,建立连接。

2.2客户端发送HTTP请求报文

连接建立后,客户端构造并发送一个HTTP请求报文。一个典型的请求报文结构如下:

复制代码
GET /index.html HTTP/1.1       <- 请求行(方法、路径、协议版本)
Host: www.example.com          <- 请求头(键值对,描述客户端和环境信息)
User-Agent: curl/7.68.0
Accept: */*
                              <- 一个空行(分隔头部和正文)
(此处是请求正文,GET方法通常没有)

注意:因为TCP是流式通信,所以加上CRLF(即'\r\n')做数据间隔。

请求行中的方法(如GETPOST)指明了操作意图,具体方法介绍如下。

2.3服务器处理并响应

服务端解析请求,定位资源,执行相应逻辑,然后返回一个HTTP响应报文。响应报文结构:

复制代码
HTTP/1.1 200 OK                <- 状态行(协议版本、状态码、状态描述)
Content-Type: text/html        <- 响应头(描述服务器和返回的资源信息)
Content-Length: 1256
Date: Tue, 07 Apr 2026 10:00:00 GMT
                              <- 一个空行(分隔头部和正文)
<!DOCTYPE html>                <- 响应正文(请求的资源数据,如HTML)
<html>
...
</html>

状态码(如200)直观地告诉客户端请求的结果,状态码具体类型如下:

1XX:请求知道了 or 正在进行

2XX:成功

3XX:重定向

4XX:客户端出错,如请求的资源不对

5XX:服务器出错

2.4关闭或复用连接

在HTTP/1.0中,响应完成后TCP连接通常会关闭。而在HTTP/1.1及以后的版本中,默认支持连接复用,同一个连接可以处理多个请求-响应事务,以提升效率。

3.数据处理

HTTP收到的数据是cjon格式,测试时可以在浏览器搜cjon进行解析,如下:

自己编程则可以使用cJSON库,具体使用方法可以上浏览器搜索

4.总结

总结来说 ,HTTP通信是一个简单的**"请求-响应"模型** :客户端发送一个格式化的请求报文,服务器返回一个格式化的响应报文。所有复杂的网络应用,都构建在这个基础模型之上。理解报文的结构和传输流程,是进行网络调试、API设计和Web开发的关键第一步。

相关推荐
CDN3601 小时前
节点智能调度实操:解决出海区域访问快慢不均、节点拥堵、跨洋延迟高,CDN 全网择优落地方案
运维·服务器·网络
roman_日积跬步-终至千里2 小时前
【数据治理(6)】DataOps 不是调度工具,而是让数据产品长期可信的运行机制
java·服务器·网络
可乐鸡翅yeah_4 小时前
个人 / 外包流媒体项目交付实战,M3U8 验收与问题闭环完整工作流
运维·网络·python·低代码·django·m3u8·在线播放
黄俊懿5 小时前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第十节:网关安全-单向加密
网络·数据库·计算机网络·安全·架构·系统架构·架构师
Patrick在香港5 小时前
Python 拉取城巴开放数据:406 条路线,香港岛巴士网络的数字画像
网络·python·数据分析·php·数据可视化·香港·开放数据
一直C6 小时前
Linux系统编程|进程间通信IPC全套详解(1)(管道、信号)
linux·c语言·开发语言·网络·青少年编程·visual studio code
Experience-摆渡6 小时前
自建 IP 轮换方案实战:健康探测 + 熔断剔除 + 粘性会话
网络·网络协议·tcp/ip
luj_17686 小时前
合法避税与投资评估实战指南
c语言·开发语言·网络·经验分享·算法
库玛西6 小时前
Linux网络编程:HTTP/HTTPS协议核心技术全解析
linux·运维·服务器·网络·c++·http·https
暴力求解6 小时前
Linux网络---NAT代理服务、内网穿透
linux·网络·智能路由器