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用UUID库生成唯一ID的方法示例
Dec 15 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
python json.loads兼容单引号数据的方法
Dec 19 Python
用python实现刷点击率的示例代码
Feb 21 Python
详解Python 解压缩文件
Apr 09 Python
python实现多线程端口扫描
Aug 31 Python
Django如何使用redis作为缓存
May 21 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
Jun 17 Python
Python 创建TCP服务器的方法
Jul 28 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
class类在python中获取金融数据的实例方法
Dec 10 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编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
PHP闭包函数详解
2016/02/13 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
jquery使用经验小结
2015/05/20 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
js中的面向对象入门
2017/03/06 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
Python爬豆瓣电影实例
2018/02/23 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
就业推荐表自我鉴定范文
2014/03/21 职场文书
购房意向书范本
2014/04/01 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书