HTTP协议与Socket网络编程笔记

一、HTTP是什么

HTTP是应用层协议,底层基于TCP传输。TCP只负责把字节数据从一端传到另一端;HTTP规定这些字节该是什么格式,实现浏览器与服务器之间通信。

二、两种架构模型

C/S 客户端-服务器模型

代表:QQ、桌面客户端软件

  • 优点:资源本地存放,访问速度快,离线部分功能可用
  • 缺点:占用本地存储;不同系统要单独开发版本;服务更新,客户端必须升级

B/S 浏览器-服务器模型

代表:网页、Web页面

  • 优点:全部资源部署在服务器;服务更新不需要改动用户端;只要有浏览器就可以访问,跨平台通用
  • 缺点:每次使用都要网络从服务器拉取资源

三、URL(统一资源定位符)

text 复制代码
协议://主机:端口/资源路径
  1. 协议 :http / https
  2. 主机:域名或者IP地址,DNS会把域名翻译成IP
  3. 端口
    • HTTP默认端口:80
    • HTTPS默认端口:443
  4. 路径:服务器上资源的位置

四、完整HTTP通信流程

  1. 在浏览器输入URL
  2. DNS解析域名,拿到服务器IP
  3. 通过TCP,和服务器建立连接(三次握手)
  4. 浏览器发出HTTP请求报文
  5. 服务器处理业务,返回HTTP响应报文
  6. 数据交互完毕,断开TCP连接

五、HTTP请求报文结构

整体分为四部分:请求行、请求头部、空行、请求体

text 复制代码
请求行:方法 资源路径 HTTP版本\r\n
请求头部:字段名: 值\r\n
......\r\n
        // 空行,标志头部结束
请求体   // GET一般为空,POST存放提交的数据

请求行

  1. 请求方法
    • GET:获取资源,参数拼接在URL后面,没有请求体
    • POST:提交数据,表单、上传,数据放在请求体
    • PUT:修改/上传服务器资源
  2. URL路径:要访问的资源
  3. 版本:HTTP/1.1

重点:HTTP换行必须是\r\n(CRLF),最后的空行\r\n不能省略,否则服务器无法识别报文。

请求头部

以键: 值格式,传递附加信息:浏览器类型、编码格式、连接方式等。

六、HTTP响应报文结构

状态行、响应头部、空行、响应体

text 复制代码
状态行:HTTP版本 状态码 描述信息\r\n
响应头部:字段名: 值\r\n
......\r\n
响应体:网页HTML、JSON数据等真正返回的内容

状态码分类

类别 含义
1xx 提示信息,请求正在处理
2xx 请求成功
3xx 重定向,需要进一步访问其他地址
4xx 客户端错误,例如404资源找不到
5xx 服务器内部错误

高频记忆:

  • 200 OK:请求成功
  • 404 Not Found:资源不存在
  • 500:服务器内部出错

七、GET 和 POST核心区别

  1. GET:用于查询获取数据,参数放在URL,没有请求体,适合读操作。
  2. POST:用于提交数据,参数放在请求体,适合提交表单、上传。

安全层面:GET参数暴露在地址栏,不适合传递敏感信息。

八、Socket视角理解HTTP

HTTP只是字符串格式的约定,本身不负责传输。

  1. 程序调用socket,建立TCP连接。
  2. 在应用层,手动拼接符合HTTP格式的字符串,通过send发给服务器。
  3. recv读取服务器返回的字节流,按照HTTP格式解析状态码、头部、网页内容。
  4. TCP断开,recv返回0,代表通信结束。

高频坑点

  1. 只写\n而不是\r\n,服务器解析失败。
  2. 缺少头部结束的空行,服务器一直阻塞等待请求。
  3. TCP是字节流,数据不会一次性全部接收完成,需要循环读取。
  4. HTTPS不是单纯HTTP,需要SSL加密,普通socket不能直接访问443端口。

九、拓展:长连接与短连接

  1. 短连接(HTTP1.1默认):一次HTTP请求完成,就断开TCP连接。
  2. 长连接 keep-alive:在请求头开启,一次TCP连接可以多次收发HTTP报文,减少频繁建立断开连接的开销。

十、核心考点总结

  1. HTTP属于应用层协议,底层依托TCP。
  2. B/S架构不需要安装客户端,依靠浏览器访问;C/S需要安装专门客户端。
  3. URL四要素:协议、主机、端口、路径。
  4. 请求报文:请求行-请求头-空行-请求体;响应报文:状态行-响应头-空行-响应体。
  5. 状态码第一位代表错误大类:2成功,4客户端错,5服务端错。
  6. GET放URL传参,POST放请求体传参。
相关推荐
qq_2842740515 分钟前
机械设计基础·滚动轴承全解(类型·代号·选型·寿命)+轮系与蜗杆蜗轮传动
笔记·学习·自动化·制造
ACP广源盛139246256735 小时前
硬件选型笔记:国产 PCIe Gen2.1 交换芯片 IX6024@ACP,工控与存量设备国产化改造方案评估
笔记·硬件架构·硬件工程·pcie·国产芯片
文人sec6 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
花间相见7 小时前
【计算基础|网络14】网络层:IP、ICMP 与 ping
网络·网络协议·tcp/ip
摇滚侠7 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
xier_ran8 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
志尊宝8 小时前
Vue3 零基础每日笔记(078):首屏加载速度优化汇总——清单化方案
笔记
半杯咖啡半行码9 小时前
Linux 驱动开发入门:内核模块编程基础
linux·服务器·网络
智能直播9 小时前
RK3528 V4L2 框架 UVC 接口自动获取 H.264 / MJPEG / YUYV 格式:从内核采集到硬解分发
java·网络·实时音视频·视频编解码·h.264