网络与API:HTTP基础+面试习题

1.HTTP基础概述 - 介绍HTTP的核心概念和特点

HTTP (HyperText Transfer Protocol) 是一种用于传输超媒体文档的应用层协议。

它是Web的基础,定义了客户端和服务器之间的请求-响应模型。
核心特点:

  • 无状态: 每个请求都是独立的,服务器不会 记住之前的请求

  • 基于TCP/IP: 使用TCP作为传输层协议,确保数据可靠传输

  • 请求-响应模型: 客户端发送请求,服务器返回响应

  • 可扩展: 通过HTTP头信息支持扩展功能

2.HTTP请求与响应结构 - 详细解析请求和响应的组成部分

HTTP请求 由三部分组成:

  1. 请求行: 包含方法、URL和协议版本

  2. 请求头: 包含客户端信息、请求参数等

  3. 请求体: 包含请求数据(如表单、JSON等)
    示例请求:

GET /api/users HTTP/1.1(请求方法+URL+协议版本)

Host: example.com (请求头)

User-Agent: Mozilla/5.0 (请求头)

Accept: application/json (请求头)

{"name": "John", "email": "john@example.com"} 请求体 ,请求体内容:{名字:John ,邮件:john@example.com}
HTTP响应 由三部分组成:

  1. 状态行: 包含协议版本、状态码和状态消息

  2. 响应头: 包含服务器信息、响应参数等

  3. 响应体: 包含响应数据(如HTML、JSON等)
    示例响应:

HTTP/1.1 200 OK (协议版本+状态码)

Content-Type: application/json (响应头)

Content-Length: 42 (响应头)

Server: Apache/2.4.41 (响应头)

{"id": 1, "name": "John", "email": "john@example.com"} (响应体)

3.HTTP方法 - 全面讲解GET、POST、PUT等方法的用途

HTTP定义了多种请求方法,用于指示对资源的操作:

|---------|----------------|
| GET | 获取资源 |
| POST | 提交新资源 |
| PUT | 更新现有资源 |
| PATCH | 部分更新资源 |
| DELETE | 删除资源 |
| HEAD | 获取资源头信息,不返回响应体 |
| OPTIONS | 获取服务器支持的HTTP方法 |
| CONNECT | 建立网络连接隧道 |
| TRACE | 追踪请求-响应的传输路径 |

4.HTTP状态码 - 分类说明1xx到5xx状态码的含义

状态码表示服务器对请求的处理结果,分为5类:

1xx - 信息性状态码

100 Continue: 服务器已接收请求头,客户端可继续发送请求体
2xx - 成功状态码

200 OK: 请求成功

201 Created: 请求已成功创建资源

204 No Content: 请求成功,但无响应体 。
3xx - 重定向状态码

301 Moved Permanently: 资源已永久移动

302 Found: 资源临时移动

304 Not Modified: 资源未修改,可使用缓存
4xx - 客户端错误状态码

400 Bad Request: 请求格式错误

401 Unauthorized: 请求需要身份验证

403 Forbidden: 服务器拒绝请求
404 Not Found: 资源未找到

405 Method Not Allowed: 请求方法不被允许
5xx - 服务器错误状态码

500 Internal Server Error: 服务器内部 错误

501 Not Implemented: 服务器不支持该请 求功能

502 Bad Gateway: 网关错误

503 Service Unavailable: 服务器暂时不 可用

504 Gateway Timeout: 网关超时

5.HTTP头信息 - 介绍常用请求头和响应头

HTTP头包含请求或响应的元数据,分为通用头 、请求头、响应头和实体头。

常用请求头:

User-Agent: 客户端浏览器或工具信息

Accept: 客户端可接受的响应格式

Content-Type: 请求体的媒体类型

Authorization: 身份验证信息

Cookie: 客户端存储的Cookie
常用响应头:

Content-Type: 响应体的媒体类型

Content-Length: 响应体的长度

Server: 服务器软件信息

Set-Cookie: 服务器设置的Cookie

Cache-Control: 缓存控制策略

6.URL结构 - 解析URL的各个组成部分

URL (Uniform Resource Locator) 用于定位网络资源,结构如下:

协议://域名:端口/路径?查询参数#片段

示例: https://example.com:443/api/users?id=123#profile

  • 协议: https

  • 域名: example.com

  • 端口: 443

  • 路径: /api/users

  • 查询参数: id=123

  • 片段: profile

7.Python实现HTTP请求 - 使用requests库的实战示例

7.1GET请求示例

Python中常用requests库来发送HTTP请求,功能强大且易于使用。

代码:

复制代码
print("7.1 GET请求示例:")
try:
    response = requests.get('https://httpbin.org/get', params={'name': 'Python', 'version': '3.10'})
    print(f"请求URL: {response.url}")
    print(f"状态码: {response.status_code}")
    # 只显示前3个头部
    headers_dict = dict(response.headers)
    print(f"响应头: {list(headers_dict.items())[:3]}...")
    print(f"响应体: {response.json()}")
    print()
except Exception as e:
    print(f"请求失败: {e}")
    print()

结果:

复制代码
请求URL: https://httpbin.org/get?name=Python&version=3.10
状态码: 200
响应头: [('Date', 'Fri, 09 Jan 2026 05:37:45 GMT'), ('Content-Type', 'application/json'), ('Content-Length', '380')]...    
响应体: {'args': {'name': 'Python', 'version': '3.10'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.31.0', 'X-Amzn-Trace-Id': 'Root=1-69609429-405157934b51d91f15a868ff'}, 'origin': '123.52.24.248', 'url': 'https://httpbin.org/get?name=Python&version=3.10'}

状态码: 200
响应体: {'args': {}, 'data': '{"name": "John Doe", "email": "john@example.com"}', 
'files': {}, 'form': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '49', 'Content-Type': 'application/json', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.31.0', 'X-Amzn-Trace-Id': 'Root=1-6960942c-3140f153121bc2020569feeb'}, 'json': {'email': 'john@example.com', 'name': 'John Doe'}, 'origin': '123.52.24.248', 'url': 'https://httpbin.org/post'}

请求URL: https://httpbin.org/get?name=Python\&version=3.10,其中:

https:协议

httpbin.org/get:域名

参数:name=Python&version=3.10

7.2 POST请求示例

代码:

复制代码
print("7.2 POST请求示例:")
try:
    # JSON数据
    data = {'name': 'John Doe', 'email': 'john@example.com'}
    response = requests.post('https://httpbin.org/post', json=data)
    print(f"状态码: {response.status_code}")
    print(f"响应体: {response.json()}")
    print()
except Exception as e:
    print(f"请求失败: {e}")
    print()

运行结果:

复制代码
状态码: 200
响应体: {'args': {}, 'data': '{"name": "John Doe", "email": "john@example.com"}', 
'files': {}, 'form': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '49', 'Content-Type': 'application/json', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.31.0', 'X-Amzn-Trace-Id': 'Root=1-6960942c-3140f153121bc2020569feeb'}, 'json': {'email': 'john@example.com', 'name': 'John Doe'}, 'origin': '123.52.24.248', 'url': 'https://httpbin.org/post'}

7.3 自定义请求头

代码:

复制代码
print("7.3 自定义请求头:")
try:
    headers = {
        'User-Agent': 'Python-HTTP-Client/1.0',
        'Content-Type': 'application/json',
        'Authorization': 'Bearer token123'
    }
    response = requests.get('https://httpbin.org/headers', headers=headers)
    print(f"响应头: {response.json()['headers']}")
    print()
except Exception as e:
    print(f"请求失败: {e}")
    print()

运行结果:

复制代码
响应头: {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Authorization': 'Bearer token123', 'Content-Type': 'application/json', 'Host': 'httpbin.org', 'User-Agent': 'Python-HTTP-Client/1.0', 'X-Amzn-Trace-Id': 'Root=1-69609430-792c5d4566f41d05136663b5'}

8.API调用实战 - 使用JSONPlaceholder公共API的完整示例

8.1 调用公共API (JSONPlaceholder)

代码:

复制代码
print("8.1 调用公共API (JSONPlaceholder):")
try:
    # 获取所有用户
    users_response = requests.get('https://jsonplaceholder.typicode.com/users')
    users = users_response.json()
    print(f"获取到 {len(users)} 个用户")
    print(f"第一个用户: {users[0]['name']} ({users[0]['email']})")
    print()
    
    # 创建新帖子
    post_data = {
        'title': 'Python HTTP Guide',
        'body': 'This is a guide to HTTP in Python',
        'userId': 1
    }
    post_response = requests.post('https://jsonplaceholder.typicode.com/posts', json=post_data)
    print(f"创建帖子响应: {post_response.json()}")
    print()
    
    # 更新帖子
    update_data = {
        'title': 'Updated Python HTTP Guide'
    }
    update_response = requests.patch('https://jsonplaceholder.typicode.com/posts/1', json=update_data)
    print(f"更新帖子响应: {update_response.json()}")
    print()
    
    # 删除帖子
    delete_response = requests.delete('https://jsonplaceholder.typicode.com/posts/1')
    print(f"删除帖子状态码: {delete_response.status_code}")
    print()
except Exception as e:
    print(f"API调用失败: {e}")

运行结果:

复制代码
8.1 调用公共API (JSONPlaceholder):       
获取到 10 个用户
第一个用户: Leanne Graham (Sincere@april.biz)

创建帖子响应: {'title': 'Python HTTP Guide', 'body': 'This is a guide to HTTP in Python', 'userId': 1, 'id': 101}

更新帖子响应: {'userId': 1, 'id': 1, 'title': 'Updated Python HTTP Guide', 'body': 'quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto'}

删除帖子状态码: 200

8.2 处理不同响应格式

代码:

复制代码
print("8.2 处理不同响应格式:")
try:
    # JSON响应
    json_response = requests.get('https://httpbin.org/json')
    print(f"JSON响应类型: {json_response.headers['Content-Type']}")
    print(f"JSON数据: {json_response.json()['slideshow']['title']}")
    print()
    
    # 文本响应
    text_response = requests.get('https://httpbin.org/robots.txt')
    print(f"文本响应类型: {text_response.headers['Content-Type']}")
    print(f"文本内容: {text_response.text[:100]}...")
    print()
    
    # 二进制响应
    binary_response = requests.get('https://httpbin.org/image/png')
    print(f"二进制响应类型: {binary_response.headers['Content-Type']}")
    print(f"二进制数据长度: {len(binary_response.content)} 字节")
    print()
except Exception as e:
    print(f"处理响应失败: {e}")
    print()

运行结果:

复制代码
8.2 处理不同响应格式:
JSON响应类型: application/json
JSON数据: Sample Slide Show

文本响应类型: text/plain
文本内容: User-agent: *
Disallow: /deny
...

二进制响应类型: image/png
二进制数据长度: 8090 字节

9.高级HTTP功能 - 会话管理、超时设置、异常处理

9.1 会话管理

代码:

复制代码
print("10.1 会话管理:")
try:
    # 创建会话对象
    session = requests.Session()
    
    # 设置会话级别的请求头
    session.headers.update({'User-Agent': 'Python-Session-Client/1.0'})
    
    # 发送第一个请求
    response1 = session.get('https://httpbin.org/cookies/set', params={'sessionid': '123456'})
    print(f"设置Cookie响应: {response1.json()}")
    
    # 发送第二个请求,会自动带上Cookie
    response2 = session.get('https://httpbin.org/cookies')
    print(f"获取Cookie响应: {response2.json()}")
    print()
except Exception as e:
    print(f"会话管理失败: {e}")
    print()

运行结果:

复制代码
10. 高级 HTTP 功能
---------------------------------------- 
10.1 会话管理:
设置Cookie响应: {'cookies': {'sessionid': '123456'}}
获取Cookie响应: {'cookies': {'sessionid': '123456'}}

9.2 超时设置

代码:

复制代码
print("9.2 超时设置:")
try:
    # 设置超时时间
    response = requests.get('https://httpbin.org/delay/2', timeout=3)
    print(f"超时测试成功: {response.status_code}")
    print()
except requests.Timeout:
    print("请求超时!")
    print()
except Exception as e:
    print(f"其他错误: {e}")
    print()

运行结果:

复制代码
10.2 超时设置:
超时测试成功: 200

9.3 异常处理

代码:

复制代码
print("9.3 异常处理:")
try:
    response = requests.get('https://nonexistent-domain-12345.com')
    response.raise_for_status()  # 抛出HTTP错误
    print(f"请求成功: {response.status_code}")
except requests.ConnectionError:
    print("连接错误: 无法连接到服务器")
except requests.Timeout:
    print("超时错误: 请求超时")
except requests.HTTPError as e:
    print(f"HTTP错误: {e}")
except Exception as e:
    print(f"其他错误: {e}")
print()

运行结果:

复制代码
10.3 异常处理:
连接错误: 无法连接到服务器

10.HTTPS协议 - 讲解HTTPS的安全特性

HTTPS (HTTP Secure) 是HTTP的安全版本,使用SSL/TLS加密传输数据。

核心特点:

  • 数据加密: 使用SSL/TLS加密客户端和服务器之间的数据传输

  • 身份验证: 服务器通过SSL证书证明自己的身份

  • 数据完整性: 确保数据在传输过程中不被篡改

HTTPS URL格式: https://example.com

代码:

复制代码
print("HTTPS请求示例:")
try:
    response = requests.get('https://www.baidu.com')
    print(f"状态码: {response.status_code}")
    print(f"网站标题: {response.text[:500]}...")
    print()
except Exception as e:
    print(f"HTTPS请求失败: {e}")
    print()

运行结果:

复制代码
HTTPS请求示例:
状态码: 200
网站标题: <!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>ç¾åº¦ä¸ä¸ï¼ä½ å°±çé<
/title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img h...  

11.RESTful API设计原则 - 介绍RESTful API的最佳实践

REST (Representational State Transfer) 是一种API设计风格,遵循以下原则:

  1. 资源为中心: 使用URL表示资源

示例: /users, /posts/123

  1. 使用HTTP方法表示操作:

GET /users - 获取所有用户

POST /users - 创建新用户

GET /users/1 - 获取特定用户

PUT /users/1 - 更新特定用户

DELETE /users/1 - 删除特定用户

  1. 无状态: 每个请求都包含完整的状态信息

  2. 统一接口: 使用标准的HTTP方法和状态码

  3. 资源表示: 使用JSON或XML表示资源

12.HTTP服务器搭建 - 如何使用Python内置模块快速搭建服务器

Python内置了简单的HTTP服务器模块,可以快速搭建测试服务器。

命令行启动HTTP服务器:

命令1:python -m http.server 8000

命令2:python -m SimpleHTTPServer 8000

启动后可通过 http://localhost:8000 访问

注意:

命令1适用于python3.0版本以上

命令2适用于python2.0版本以上

命令行启动:按 Ctrl + C 关闭服务器

13.常见错误和注意事项 - 避免HTTP开发中的常见问题

  1. 404 Not Found: 检查URL是否正确,资源是否存在

  2. 401 Unauthorized: 检查身份验证信息是否正确

  3. 403 Forbidden: 检查是否有权限访问该资 源

  4. 500 Internal Server Error: 服务器内部 错误,联系服务器管理员

  5. 连接超时: 检查网络连接,增加超时时间

  6. 编码问题: 确保正确处理响应编码

  7. 数据格式: 确保请求体格式与Content-Type一致

  8. 安全问题: 不要在URL中传递敏感信息,使 用HTTPS加密传输

15.面试习题

一、选择题

HTTP协议是基于哪个协议之上的?

A. UDP

B. TCP

C. IP

D. HTTP/2
**B. TCP**
以下哪个HTTP方法用于获取资源?

A. POST

B. GET

C. PUT

D. DELETE
**B. GET**

HTTP协议的默认端口号是:

A. 80

B. 443

C. 8080

D. 21
**A. 80**
HTTP状态码200表示:

A. 请求成功

B. 请求重定向

C. 请求错误

D. 服务器错误
**A. 请求成功**
以下哪个状态码表示客户端请求的资源不存在?

A. 200

B. 301

C. 404

D. 500
**C. 404**

二、判断题

HTTP协议是无状态的,即每个请求都是独立的。(对/错)

HTTP/2相比HTTP/1.1引入了头部压缩和多路复用等特性。(对/错)

HTTPS协议在HTTP协议的基础上增加了SSL/TLS层,用于加密通信。(对/错)

HTTP请求报文包含请求行、请求头和请求体。(对/错)

HTTP响应报文包含状态行、响应头和响应体。(对/错)
**HTTP协议是无状态的,即每个请求都是独立的。(对/错)**

**对**

**HTTP/2相比HTTP/1.1引入了头部压缩和多路复用等特性。(对/错)**

**对**

**HTTPS协议在HTTP协议的基础上增加了SSL/TLS层,用于加密通信。(对/错)**

**对**

**HTTP请求报文包含请求行、请求头和请求体。(对/错)**

**对**

**HTTP响应报文包含状态行、响应头和响应体。(对/错)**

**对**

三、简答题

简述HTTP协议的工作原理。
HTTP是一种应用层协议,用于在Web服务器和客户端之间传输超文本数据。它的工作原理基于请求/响应模型:客户端(如浏览器)发送一个HTTP请求到服务器,服务器处理请求并返回一个HTTP响应。这个响应包含了所请求的数据(如HTML文档、图片等)或者错误信息。
解释HTTP状态码301和302的区别。
HTTP状态码301表示永久重定向,意味着请求的资源已被永久移动到新位置,客户端应使用Location头指定的新URI进行以后的请求。302表示临时重定向,资源临时被移动到另一个URI,客户端在本次请求中使用新URI,但在未来的请求中仍应使用原URI。
什么是HTTP请求方法?请列举常见的HTTP请求方法并简要说明其用途。
**GET**:请求从服务器检索特定资源。是最常用的方法。

**POST**:向服务器提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求体中。

**PUT**:上传指定资源,请求服务器存储资源。

**DELETE**:请求服务器删除指定的资源。

**HEAD**:请求获取与GET请求相同的响应,但没有响应体。
什么是HTTP头信息?请列举常见的HTTP请求头和响应头字段。

  • **请求头**:

  • `User-Agent`:发出请求的浏览器或客户端标识。

  • `Accept`:客户端能够处理的媒体类型。

  • `Host`:请求的服务器的域名。

  • `Content-Type`:请求体的媒体类型。

  • `Authorization`:认证信息,用于访问受保护的资源。

  • **响应头**:

  • `Content-Type`:响应体的媒体类型。

  • `Set-Cookie`:服务器向客户端设置cookie。

  • `Location`:用于重定向的URI。

  • `Server`:服务器软件名称。
    简述HTTPS协议与HTTP协议的区别。
    HTTPS是HTTP的安全版本,它在HTTP的基础上通过SSL/TLS协议提供了数据加密、完整性校验和身份验证。这意味着HTTPS可以保护交换的数据免受窃听和篡改,并确保数据是从一个真实的服务器发送的。主要区别在于HTTPS在传输层使用SSL/TLS进行加密,而HTTP不提供这样的加密。

相关推荐
深蓝海拓18 小时前
PySide6从0开始学习的笔记(二十三)使用QRunnable在线程池中执行临时任务
笔记·python·qt·学习·pyqt
乾元18 小时前
无线定位与链路质量预测——从“知道你在哪”,到“提前知道你会不会掉线”的网络服务化实践
运维·开发语言·人工智能·网络协议·重构·信息与通信
MistaCloud18 小时前
Pytorch深入浅出(十五)之GPU加速与设备管理
人工智能·pytorch·python·深度学习
切糕师学AI18 小时前
SSL是什么?
网络协议
无限码力18 小时前
华为OD技术面真题 - 计算机网络 - 3
计算机网络·华为od·面试·华为od技术面真题·华为od面试八股文·华为od技术面计算机网络相关
ghostwritten18 小时前
Kubernetes 网络模式深入解析?
网络·容器·kubernetes
Tao____18 小时前
企业级物联网平台
java·网络·物联网·mqtt·网络协议
声网18 小时前
如何用 Fun-ASR-Nano 微调一个「听懂行话」的语音模型?丨Voice Agent 学习笔记
笔记·学习·xcode
Aurora-Borealis.18 小时前
Day31 函数专题2
python