python web.py开发httpserver解决跨域问题实例解析


Posted in Python onFebruary 12, 2018

使用web.py做http server开发时,遇到postman能够正常请求到数据,但是浏览器无法请求到数据,查原因之后发现是跨域请求的问题。

跨域请求,就是在浏览器窗口中,和某个服务端通过某个 “协议+域名+端口号” 建立了会话的前提下,去使用与这三个属性任意一个不同的源提交了请求,那么浏览器就认为你是跨域了,违反了浏览器的同源策略。 w3c标准中,有针对跨域请求的规范,在响应头中有以下三种跨域访问限制:

Access-Control-Allow-Origin:限制允许跨域访问的源,比如http://192.168.10.12:8080,注意这里仅仅支持*(表示所有源)号或者某个源,不支持多个源,如果要实现多个源,可以自己包装一个集合,对每次的请求在集合中判断是否存在,如存在,就放到响应头中来;

Access-Control-Allow-Methods:限制允许跨域访问的http方法类型,多个以逗号隔开,比如:POST, GET, OPTIONS,PUT, DELETE

Access-Control-Allow-Headers:限制允许跨域访问的http头部,包含这里设置的头,才允许跨域访问,比如:Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization

web.py使用web.header() ,可以定义header。

完整的httpserver代码如下【ap-httpserver.py】

#!/usr/bin/env python 
# encoding: utf-8 
import redis 
import web 
import json 
import string 
from time import time 
 
urls = ( 
  '/qlljx/realtimedata', 'realtimedata' 
  ) 
app = web.application(urls, globals()) 
 
def getResult(): 
 r = redis.Redis(host='127.0.0.1', port=6379) 
 result_list = [] 
 regionlist = r.hgetall('regionlist') 
 timestamp = r.hget('zhongguo_bgp', 'timestamp') 
 for region in regionlist: 
  value = {'mip': str(regionlist[region]), 'region': region, \ 
    'inpps': int(r.hget(region, 'inpps')), 'outpps': int(r.hget(region, 'outpps')), \ 
    'inbps': int(r.hget(region, 'inbps')), 'outbps': int(r.hget(region, 'outbps')), \ 
    'pktpct': string.atof(r.hget(region, 'pktpct')), 'bytpct': string.atof(r.hget(region, 'bytpct'))} 
  result_list.append(value) 
 
 result = {'timestamp': timestamp, 'result': result_list} 
 return json.dumps(result) 
 
class realtimedata: 
 def POST(self): 
  data = web.data() 
  request_type = str(json.loads(data)['type']) 
  if request_type == 'getRealTimeData': 
   result = getResult() 
   web.header("Access-Control-Allow-Origin", "*") 
   #web.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") 
   #web.header("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, \ 
   #  Accept-Encoding, X-CSRF-Token, Authorization") 
   return result 
 
if __name__ == "__main__": 
 app.run()

其中只使用了"Access-Control-Allow-Origin" 限制,允许所有源的请求。启动httpserver:

[root@localhost python]# ./ap-httpserver.py 1216

使用浏览器请求数据正常了。

总结

以上就是本文关于python web.py开发httpserver解决跨域问题实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
跟老齐学Python之有点简约的元组
Sep 24 Python
python中split方法用法分析
Apr 17 Python
深入讲解Python编程中的字符串
Oct 14 Python
python Django批量导入数据
Mar 25 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
Django跨域请求CSRF的方法示例
Nov 11 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
python实现连连看辅助(图像识别)
Mar 25 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 04 Python
深度学习tensorflow基础mnist
Apr 14 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 #Python
Flask解决跨域的问题示例代码
Feb 12 #Python
tensorflow实现对图片的读取的示例代码
Feb 12 #Python
python中数据爬虫requests库使用方法详解
Feb 11 #Python
python 接口测试response返回数据对比的方法
Feb 11 #Python
使用Python读取大文件的方法
Feb 11 #Python
python脚本作为Windows服务启动代码详解
Feb 11 #Python
You might like
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
php异常处理捕获错误整理
2019/09/23 PHP
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
python speech模块的使用方法
2020/09/09 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
阿里云:Aliyun.com
2017/02/15 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
JAVA程序员面试题
2012/10/03 面试题
高校优秀辅导员事迹材料
2014/05/07 职场文书
导师工作推荐信范文
2014/05/17 职场文书
食品安全宣传标语
2014/06/07 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python
KVM基础命令详解
2022/04/30 Servers
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers