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 相关文章推荐
django实现分页的方法
May 26 Python
Python下Fabric的简单部署方法
Jul 14 Python
Python处理JSON数据并生成条形图
Aug 05 Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
Python-接口开发入门解析
Aug 01 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
python判断变量是否为列表的方法
Sep 17 Python
详解python算法常用技巧与内置库
Oct 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/08/05 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
php-fpm中max_children的配置
2019/03/15 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
法学研究生自我鉴定范文
2013/12/04 职场文书
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
暑期实践思想汇报
2014/01/06 职场文书
小学校园活动策划
2014/01/30 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
春节请假条
2014/04/11 职场文书
员工保密承诺书
2014/05/28 职场文书
节水口号标语
2014/06/19 职场文书
数学教研活动总结
2014/07/02 职场文书
教师演讲稿开场白
2014/08/25 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
浅谈Node的内存泄露问题
2022/05/06 NodeJs