第105集 HTTP协议基础

学习目标

  • 理解HTTP协议的基本概念和特点
  • 掌握HTTP请求和响应的结构
  • 熟悉常见的HTTP方法和状态码
  • 了解HTTP头信息的作用
  • 认识HTTP版本的演进

一、HTTP协议概述

1. 什么是HTTP协议

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于在客户端和服务器之间传输超文本数据的应用层协议。它是互联网上最广泛使用的协议之一,用于浏览器与Web服务器之间的通信。

2. HTTP协议的特点

  • 无状态协议:服务器不会保存客户端的状态信息,每个请求都是独立的
  • 基于请求-响应模型:客户端发送请求,服务器返回响应
  • 可扩展:通过头信息可以扩展协议功能
  • 支持多种数据格式:不仅支持HTML,还支持JSON、XML、图片、视频等

3. HTTP与HTTPS的区别

特性 HTTP HTTPS
端口 80 443
安全性 明文传输,不安全 加密传输,安全
协议层 直接在TCP上 在TCP和HTTP之间加入SSL/TLS加密层
证书 不需要 需要CA颁发的证书

二、HTTP请求结构

HTTP请求由三部分组成:请求行、请求头、请求体(可选)

1. 请求行

请求行包含三个部分:请求方法、URL和HTTP版本

GET /index.html HTTP/1.1
  • 请求方法:表示客户端希望对资源执行的操作(如GET、POST、PUT、DELETE等)
  • URL:请求的资源路径
  • HTTP版本:使用的HTTP协议版本

2. 请求头

请求头包含客户端的信息和请求的附加信息,格式为"键: 值"

常见的请求头:

  • Host: 请求的服务器主机名
  • User-Agent: 客户端的浏览器信息
  • Accept: 客户端可接受的内容类型
  • Content-Type: 请求体的数据类型
  • Content-Length: 请求体的长度
  • Cookie: 客户端保存的Cookie信息

3. 请求体

请求体包含要发送给服务器的数据,通常在POST、PUT等方法中使用

username=admin&password=123456

三、HTTP响应结构

HTTP响应也由三部分组成:状态行、响应头、响应体

1. 状态行

状态行包含三个部分:HTTP版本、状态码和状态短语

HTTP/1.1 200 OK

2. 响应头

响应头包含服务器的信息和响应的附加信息

常见的响应头:

  • Content-Type: 响应体的内容类型
  • Content-Length: 响应体的长度
  • Server: 服务器软件信息
  • Date: 响应生成的时间
  • Set-Cookie: 服务器设置的Cookie信息
  • Cache-Control: 缓存控制指令

3. 响应体

响应体包含服务器返回给客户端的实际数据,通常是HTML、JSON、图片等

<html>
<head><title>首页</title></head>
<body><h1>Hello World</h1></body>
</html>

四、HTTP方法

HTTP方法表示客户端希望对资源执行的操作,常用的方法有:

方法 描述 是否包含请求体 幂等性
GET 请求获取资源
POST 提交数据,创建资源
PUT 更新资源
DELETE 删除资源
HEAD 仅请求头信息
OPTIONS 请求服务器支持的方法
PATCH 部分更新资源

幂等性说明

  • 幂等:多次请求产生相同的效果,不会改变资源状态
  • 非幂等:多次请求可能产生不同的效果,可能改变资源状态

五、HTTP状态码

HTTP状态码用于表示服务器对请求的处理结果,分为五大类:

1. 1xx(信息性状态码)

  • 100 Continue:服务器已接收请求头,客户端应继续发送请求体
  • 101 Switching Protocols:服务器同意切换协议

2. 2xx(成功状态码)

  • 200 OK:请求成功
  • 201 Created:资源创建成功
  • 204 No Content:请求成功但无响应体

3. 3xx(重定向状态码)

  • 301 Moved Permanently:永久重定向
  • 302 Found:临时重定向
  • 304 Not Modified:资源未修改,使用缓存

4xx(客户端错误状态码)

  • 400 Bad Request:请求参数错误
  • 401 Unauthorized:未授权,需要身份验证
  • 403 Forbidden:禁止访问
  • 404 Not Found:资源不存在

5xx(服务器错误状态码)

  • 500 Internal Server Error:服务器内部错误
  • 502 Bad Gateway:网关错误
  • 503 Service Unavailable:服务器暂时不可用
  • 504 Gateway Timeout:网关超时

六、HTTP版本演进

1. HTTP/1.0

  • 1996年发布
  • 每次请求都需要建立新的TCP连接
  • 不支持持久连接

2. HTTP/1.1

  • 1997年发布
  • 支持持久连接(Keep-Alive)
  • 支持管道化请求
  • 支持分块传输编码
  • 支持虚拟主机

3. HTTP/2

  • 2015年发布
  • 二进制分帧
  • 多路复用(一个TCP连接处理多个请求)
  • 头部压缩
  • 服务器推送

4. HTTP/3

  • 2022年发布
  • 基于QUIC协议(UDP的改进版)
  • 更快的连接建立
  • 更好的拥塞控制
  • 内置加密

七、HTTP协议的工作流程

  1. 建立连接:客户端通过TCP协议与服务器建立连接(默认端口80)
  2. 发送请求:客户端发送HTTP请求报文
  3. 处理请求:服务器解析请求并处理
  4. 返回响应:服务器发送HTTP响应报文
  5. 关闭连接:根据Connection头决定是否关闭连接

八、常见面试题

  1. HTTP和HTTPS的区别是什么?

    • HTTPS是HTTP的安全版本,通过SSL/TLS加密传输数据
    • HTTPS使用端口443,HTTP使用端口80
    • HTTPS需要CA证书,HTTP不需要
  2. GET和POST的区别是什么?

    • GET请求参数在URL中,POST在请求体中
    • GET请求有长度限制,POST没有
    • GET请求可缓存,POST不可
    • GET请求是幂等的,POST不是
  3. 什么是HTTP的无状态性?如何解决?

    • HTTP无状态是指服务器不保存客户端的状态信息
    • 解决方法:使用Cookie、Session、Token等机制
  4. HTTP状态码301和302有什么区别?

    • 301是永久重定向,搜索引擎会更新索引
    • 302是临时重定向,搜索引擎不会更新索引

九、总结

本集我们学习了HTTP协议的基础知识,包括:

  • HTTP协议的概念和特点
  • HTTP请求和响应的结构
  • 常见的HTTP方法和状态码
  • HTTP头信息的作用
  • HTTP版本的演进

HTTP协议是Web开发的基础,理解HTTP协议对于学习网络编程和Web开发至关重要。在后续的课程中,我们将学习如何使用Python的requests库来发送HTTP请求,以及如何构建自己的HTTP服务器。

练习题

  1. 简述HTTP请求的结构组成。
  2. 列举5个常见的HTTP状态码及其含义。
  3. 解释什么是HTTP的幂等性。
  4. 比较HTTP/1.1和HTTP/2的主要区别。
  5. 说明Cookie和Session的作用以及它们的区别。
« 上一篇 UDP客户端、服务器 下一篇 » requests库基础