python中jsonp是什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
JSONP(JSON with Padding)是一种跨域数据交互协议,它允许在浏览器中从不同源的服务器请求数据,并克服了由于同源策略(Same-Origin Policy)带来的限制。JSONP不是Python中的特定功能,而是一种Web开发中的技术,广泛应用于JavaScript中。
简单来说,JSONP通过动态创建<script>
标签来实现跨域请求,服务器返回的不再是纯JSON数据,而是将JSON数据包裹在一个指定的回调函数中,这样浏览器就可以直接执行这个脚本,进而调用回调函数处理数据。
例如,一个典型的JSONP请求和响应如下:
请求:
<script>
function handleResponse(data) {
console.log(data);
}
</script>
<script src="http://example.com/data?callback=handleResponse"></script>
响应(服务器返回):
handleResponse({"key": "value"});
在Python Web框架中,如Django或Flask,如果你需要支持JSONP,通常会检查请求中是否有callback
参数,如果有,则构造相应的JSONP响应。这里是一个简单的Flask示例:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/data', methods=['GET'])
def data():
callback = request.args.get('callback', None)
data = {"key": "value"}
if callback:
# 构造JSONP响应
response = f"{callback}({json.dumps(data)})"
content_type = 'application/javascript'
else:
# 默认为JSON响应
response = jsonify(data)
content_type = 'application/json'
return response, 200, {'Content-Type': content_type}
if __name__ == '__main__':
app.run(debug=True)
这段代码展示了如何在Flask应用中根据请求参数callback
的存在与否,选择返回标准的JSON响应还是JSONP响应。