当前位置: 首页 > ai >正文

【Python Web开发】03-HTTP协议

文章目录

    • 1. HTTP协议基础
      • 1.1 请求-响应模型
      • 1.2 请求方法
      • 1.3 请求和响应结构
      • 1.4 状态码
    • 2. Python 发送 HTTP 请求
      • 2.1 urllib库
      • 2.2 requests 库
    • 3. Python 构建 HTTP 服务器
      • 3.1 http.server模块
      • 3.2 Flask 框架
    • 4. HTTP 协议的安全问题
    • 5. 缓存和性能优化

HTTP(Hypertext Transfer Protocol)是用于在互联网上传输超文本的协议,是 Web 世界的基础。

HTTP协议是无状态协议,同一客户端的两次请求之间没有任何关系,服务器并不知道两次请求来自同一客户端。

Python 提供了丰富的库和工具来处理 HTTP 协议相关的任务,以下从 HTTP 协议基础、Python 发送 HTTP 请求、Python 构建 HTTP 服务器等方面全面介绍

1. HTTP协议基础

1.1 请求-响应模型

HTTP 是基于客户端 - 服务器模型的协议,客户端(如浏览器、Python 脚本)向服务器发送请求,服务器接收到请求后进行处理,并返回响应给客户端。

1.2 请求方法

常见的 HTTP 请求方法有:

  • GET:用于从服务器获取资源。例如,在浏览器中输入网址访问网页就是使用 GET 请求。
  • POST:用于向服务器提交数据,通常用于表单提交、上传文件等。
  • PUT:用于更新服务器上的资源。
  • DELETE:用于删除服务器上的资源。

1.3 请求和响应结构

  • 请求:由请求行(包含请求方法、请求 URL 和 HTTP 版本)、请求头(包含一系列键值对,如 User - Agent、Content - Type 等)和请求体(可选,用于携带数据,如 POST 请求的数据)组成。

  • 响应:由状态行(包含 HTTP 版本、状态码和状态信息)、响应头(包含服务器信息、内容类型等)和响应体(包含服务器返回的实际数据,如 HTML 页面、JSON 数据等)组成。

1.4 状态码

状态码用于表示请求的结果,常见的状态码分类如下:

  • 1xx:信息性状态码,表示请求已接收,继续处理。
  • 2xx:成功状态码,如 200 表示请求成功。
  • 3xx:重定向状态码,如 301 表示永久重定向,302 表示临时重定向。
  • 4xx:客户端错误状态码,如 404 表示请求的资源不存在,403 表示禁止访问。
  • 5xx:服务器错误状态码,如 500 表示服务器内部错误。

2. Python 发送 HTTP 请求

2.1 urllib库

urllib 是 Python 标准库,用于处理 URL 相关的操作,包括发送 HTTP 请求。以下是一个使用 urllib 发送 GET 请求的示例:

import urllib.requesturl = 'https://www.example.com'
with urllib.request.urlopen(url) as response:html = response.read().decode('utf - 8')print(html)

2.2 requests 库

requests 是一个第三方库,它提供了更简洁、人性化的 API 来发送 HTTP 请求,是 Python 中处理 HTTP 请求的首选库。

  • 发送GET请求
import requestsresponse = requests.get('https://www.example.com')
if response.status_code == 200:print(response.text)
  • 发送POST请求
import requestsdata = {'key': 'value'}
response = requests.post('https://www.example.com', data=data)
if response.status_code == 200:print(response.text)

3. Python 构建 HTTP 服务器

3.1 http.server模块

http.server 是 Python 标准库中的模块,可用于创建简单的 HTTP 服务器。以下是一个简单的示例:

import http.server
import socketserverPORT = 8000Handler = http.server.SimpleHTTPRequestHandlerwith socketserver.TCPServer(("", PORT), Handler) as httpd:print(f"Serving at port {PORT}")httpd.serve_forever()

3.2 Flask 框架

Flask 是一个轻量级的 Web 框架,可用于构建功能更复杂的 HTTP 服务器。以下是一个简单的 Flask 示例:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(debug=True)

4. HTTP 协议的安全问题

  • HTTPS:HTTP 是明文传输协议,数据在传输过程中容易被窃取和篡改。HTTPS 是 HTTP 的安全版本,它通过 SSL/TLS 协议对数据进行加密传输,保证数据的安全性。

  • 安全漏洞:常见的 HTTP 安全漏洞包括 SQL 注入、XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等,在开发过程中需要采取相应的防范措施。

5. 缓存和性能优化

  • 缓存:HTTP 协议支持缓存机制,通过设置响应头中的 Cache - Control、Expires 等字段,可以控制客户端和中间代理服务器对资源的缓存策略,减少服务器的负载和响应时间。

  • 性能优化:可以通过压缩响应数据(如使用 Gzip 压缩)、优化服务器配置等方式提高 HTTP 应用的性能。

http://www.xdnf.cn/news/2562.html

相关文章:

  • Python 正则表达式 re 包
  • 1.文档搜索软件Everything 的使用介绍
  • pdf.js移动端预览PDF文件时,支持双指缩放
  • uniapp实现统一添加后端请求Header方法
  • .NET8配置组件
  • Google Earth Engine 中地形晕渲图(Hillshade)的实现与应用
  • Java SE(4)——方法详解
  • Rust 学习笔记:关于切片的两个练习题
  • 复现:Mamba-UNet:降水临近预报的创新解决方案
  • LBS服务(基于位置的服务)与LLM(大型语言模型)交互功能分析
  • Vue+Echarts 3D地图效果
  • 配置扩展ACL
  • 前端连接websocket服务报错 Unexpected response code: 301
  • GTC2025全球流量大会:领驭科技以AI云端之力,助力中国企业出海破浪前行
  • Typecho博客使用阿里云cdn和oss:handsome主题进阶版
  • Vue 中局部指令(directives)的用法详解
  • STM32 RTC配置
  • JavaScript 中的类(Class)语法
  • Vue 组件通信方式总览
  • OpenCV 图形API(70)图像与通道拼接函数-----创建一个图像或矩阵(GMat)的副本的操作函数copy()
  • Maven多模块工程版本管理:flatten-maven-plugin扁平化POM
  • 打火机检测数据集VOC+YOLO格式925张1类别
  • 使用POI和EasyExcel使用导入
  • 实战指南:搭建AIRIOT全场景智慧养老管理平台系统全流程解析
  • 2025系统架构师---基于规则的系统架构风格‌
  • 【硬件系统架构】哈佛架构
  • Linux 内核网络协议栈中的关键数据结构:inet_skb_parm 与 ip_options
  • 媒体查询使用
  • 《Go 语言高并发爬虫开发:淘宝商品 API 实时采集与 ETL 数据处理管道》
  • 无刷空心杯电机及机器人灵巧手的技术解析与发展趋势