http 请求报文响应报文的格式以及Token cookie session 区别
发布人:shili8
发布时间:2025-02-23 02:27
阅读次数:0
**HTTP 请求报文与响应报文的格式**
HTTP(Hypertext Transfer Protocol)是互联网上应用最广泛的一种网络传输协议。它定义了浏览器和服务器之间交换数据的格式。
### HTTP 请求报文的格式HTTP请求报文由四部分组成:请求行、头部、空行和实体主体。
* **请求行**:第一个行,描述了请求的类型(GET、POST、PUT、DELETE等)、目标资源的URI,以及协议版本。
http GET /path/to/resource HTTP/1.1
* **头部**:紧接着请求行的部分,包含了一系列的键值对,描述了请求的元信息,如客户端类型、语言、缓存控制等。
http Host: example.com Accept: */* User-Agent: Mozilla/5.0 (Windows NT10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
* **空行**:请求头部后面紧接着的空白行,表示请求体的开始。
* **实体主体**:最后一部分,是请求携带的数据,如表单数据、文件等。
### HTTP 响应报文的格式HTTP响应报文由四部分组成:状态行、头部、空行和实体主体。
* **状态行**:第一个行,描述了服务器对请求的处理结果,包括状态码和状态信息。
http HTTP/1.1200 OK
* **头部**:紧接着状态行的部分,包含了一系列的键值对,描述了响应的元信息,如内容类型、缓存控制等。
http Content-Type: application/json Cache-Control: max-age=3600
* **空行**:响应头部后面紧接着的空白行,表示响应体的开始。
* **实体主体**:最后一部分,是响应携带的数据,如JSON数据、HTML页面等。
### Token、Cookie和Session的区别Token、Cookie和Session都是用于身份验证和会话管理的技术,但它们有不同的作用机制和应用场景。
#### Token* **定义**:Token是一种短暂的凭证,通常由服务器生成并返回给客户端。
* **作用机制**:当客户端发送请求时,服务器检查Token是否有效,如果有效,则继续处理请求。如果Token失效或不存在,则拒绝请求。
* **应用场景**:Token适用于需要快速身份验证和授权的场景,如登录、支付等。
#### Cookie* **定义**:Cookie是一种客户端存储的小型文本文件,通常由服务器生成并返回给客户端。
* **作用机制**:当客户端发送请求时,服务器检查Cookie是否存在,如果存在,则继续处理请求。如果Cookie不存在或失效,则拒绝请求。
* **应用场景**:Cookie适用于需要长期身份验证和会话管理的场景,如登录、购物车等。
#### Session* **定义**:Session是一种服务器端存储的小型文本文件,通常由服务器生成并返回给客户端。
* **作用机制**:当客户端发送请求时,服务器检查Session是否存在,如果存在,则继续处理请求。如果Session不存在或失效,则拒绝请求。
* **应用场景**:Session适用于需要长期身份验证和会话管理的场景,如登录、购物车等。
###代码示例#### Token示例
from flask import Flask, request, jsonifyapp = Flask(__name__) #生成Tokendef generate_token(): return "1234567890" @app.route("/login", methods=["POST"]) def login(): username = request.json.get("username") password = request.json.get("password") # 验证用户名和密码 if username == "admin" and password == "123456": token = generate_token() return jsonify({"token": token}) else: return jsonify({"error": "Invalid username or password"}),401@app.route("/protected", methods=["GET"]) def protected(): token = request.headers.get("Authorization") if token == "1234567890": return jsonify({"message": "Hello, admin!"}) else: return jsonify({"error": "Unauthorized"}),401
#### Cookie示例
from flask import Flask, request, make_responseapp = Flask(__name__) # 设置Cookie@app.route("/login", methods=["POST"]) def login(): username = request.json.get("username") password = request.json.get("password") # 验证用户名和密码 if username == "admin" and password == "123456": response = make_response(jsonify({"message": "Hello, admin!"})) response.set_cookie("username", username) return response else: return jsonify({"error": "Invalid username or password"}),401@app.route("/protected", methods=["GET"]) def protected(): username = request.cookies.get("username") if username == "admin": return jsonify({"message": "Hello, admin!"}) else: return jsonify({"error": "Unauthorized"}),401
#### Session示例
from flask import Flask, request, sessionapp = Flask(__name__) app.secret_key = "secret_key" # 设置Session@app.route("/login", methods=["POST"]) def login(): username = request.json.get("username") password = request.json.get("password") # 验证用户名和密码 if username == "admin" and password == "123456": session["username"] = username return jsonify({"message": "Hello, admin!"}) else: return jsonify({"error": "Invalid username or password"}),401@app.route("/protected", methods=["GET"]) def protected(): if "username" in session and session["username"] == "admin": return jsonify({"message": "Hello, admin!"}) else: return jsonify({"error": "Unauthorized"}),401
以上是HTTP请求报文和响应报文的格式,以及Token、Cookie和Session的区别。这些技术都是用于身份验证和会话管理的重要工具,需要根据具体场景选择合适的技术来实现安全和高效的应用程序。