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之玩转字符串(2)更新篇
Sep 28 Python
使用Python下的XSLT API进行web开发的简单教程
Apr 15 Python
Python 类与元类的深度挖掘 I【经验】
May 06 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
Python设计模式之外观模式实例详解
Jan 17 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
python 字符串常用方法汇总详解
Sep 16 Python
python中如何使用insert函数
Jan 09 Python
python中get和post有什么区别
Jun 19 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
Python time库的时间时钟处理
May 02 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
AM/FM收音机的安装与调试
2021/03/02 无线电
用libTemplate实现静态网页的生成
2006/10/09 PHP
php抓即时股票信息
2006/10/09 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
UserData用法总结 lanyu出品
2010/07/01 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
Python中单、双下划线的区别总结
2017/12/01 Python
用python与文件进行交互的方法
2018/03/01 Python
详解python3中zipfile模块用法
2018/06/18 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
python @classmethod 的使用场合详解
2019/08/23 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
多个版本的python共存时使用pip的正确做法
2020/10/26 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
个性发展自我评价
2014/02/11 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
行政前台岗位职责
2015/04/16 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书