flask+vue,前端get请求传入的参数过多过长时,需要对参数进行加密或压缩处理,给出代码示例
时间: 2023-12-14 12:39:13 浏览: 85
为了解决前端get请求参数过多过长的问题,可以采用对参数进行加密或压缩的方式,下面分别给出加密和压缩的代码示例。
1. 加密参数
可以使用AES加密算法对参数进行加密,具体实现如下:
前端代码:
```javascript
import CryptoJS from 'crypto-js'
let params = {
// 待加密的参数
name: '张三',
age: 18,
...
}
let key = CryptoJS.enc.Utf8.parse('1234567890123456') // 加密密钥
let iv = CryptoJS.enc.Utf8.parse('1234567890123456') // 加密向量
let encrypted = CryptoJS.AES.encrypt(JSON.stringify(params), key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
let data = {
encryptedData: encrypted.toString()
}
// 发送请求
axios.get('/api/getData', {
params: data
})
```
后端代码:
```python
import CryptoJS
from flask import request
@app.route('/getData')
def get_data():
encrypted_data = request.args.get('encryptedData')
key = '1234567890123456' # 加密密钥
iv = '1234567890123456' # 加密向量
cipher_text = CryptoJS.AES.decrypt(encrypted_data, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
params = json.loads(cipher_text.decode('utf-8'))
# 处理解密后的参数
...
return response
```
2. 压缩参数
可以使用gzip压缩算法对参数进行压缩,具体实现如下:
前端代码:
```javascript
import pako from 'pako'
let params = {
// 待压缩的参数
name: '张三',
age: 18,
...
}
let compressed = pako.gzip(JSON.stringify(params))
let base64Compressed = btoa(String.fromCharCode.apply(null, compressed))
let data = {
compressedData: base64Compressed
}
// 发送请求
axios.get('/api/getData', {
params: data
})
```
后端代码:
```python
import base64
import json
import zlib
from flask import request
@app.route('/getData')
def get_data():
compressed_data = request.args.get('compressedData')
compressed_data = base64.b64decode(compressed_data)
params = json.loads(zlib.decompress(compressed_data, 16+zlib.MAX_WBITS).decode('utf-8'))
# 处理解压缩后的参数
...
return response
```
注意:使用压缩算法传输的参数需要在后端进行解压缩处理。
阅读全文