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项目指定IP和端口的方法
May 14 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
Python3监控疫情的完整代码
Feb 20 Python
关于python中的xpath解析定位
Mar 06 Python
python zip,lambda,map函数代码实例
Apr 04 Python
python网络编程之五子棋游戏
May 14 Python
Pycharm中如何关掉python console
Oct 27 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 Python
浅谈Python协程asyncio
Jun 20 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
第八节--访问方式
2006/11/16 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
JavaScript实现简单的计算器
2020/01/16 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
python实现画一颗树和一片森林
2018/06/25 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
css3实现可拖动的魔方3d效果
2019/05/07 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
关于热爱祖国的演讲稿
2014/05/04 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
安全月宣传标语
2014/10/07 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang