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放请求体传参。
相关推荐
haerapi26 分钟前
流式对话接口怎么选:SSE 与 WebSocket 的原理、实现和工程边界
网络·websocket·网络协议
摇滚侠28 分钟前
《SpringBoot 3:入门与应用实战》第 10 章 REST 服务请求与调用 Reactor 与 WebFlux 笔记 28
spring boot·笔记·后端
幸运小圣33 分钟前
JavaScript 关键字与保留字学习笔记详细讲解,一篇get ✅【JavaScript查缺补漏】
javascript·笔记·学习
砚凝霜1 小时前
【软考信息安全】第二章 网络攻击基础与常见技术方法
网络·安全·php
Raas1001 小时前
AI网关在架构中的位置?MAI Gateway(魔芋企业级AI网关)给出企业级答案
大数据·网络·人工智能·架构·gateway·ai网关·mai gateway
2401_868534781 小时前
安全管理策略和制度
网络·安全
Discipline~Hai1 小时前
Linux网络编程02-TCP协议
linux·网络·tcp/ip·嵌入式·linux网络编程
十铭忘1 小时前
英语介词怎么理解?
笔记
johnny2331 小时前
网络扫描工具Nmap和Zenmap:简介、命令行解读、实战
网络