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的pdb调试命令的命令整理及实例
Jul 12 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
python抓取网站的图片并下载到本地的方法
May 22 Python
python2.7实现邮件发送功能
Dec 12 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 Python
Python any()函数的使用方法
Oct 28 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
django中media媒体路径设置的步骤
Nov 15 Python
如何基于python实现归一化处理
Jan 20 Python
Python流程控制常用工具详解
Feb 24 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 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
PHP 递归效率分析
2009/11/24 PHP
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
php实现的双色球算法示例
2017/06/20 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
Python读取mp3中ID3信息的方法
2015/03/05 Python
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python松散正则表达式用法分析
2016/04/29 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
矿泉水广告词
2014/03/20 职场文书
岗位职责范本大全
2015/02/26 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
赢在执行观后感
2015/06/16 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
初中数学课堂教学反思
2016/02/17 职场文书