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 相关文章推荐
使用IPython下的Net-SNMP来管理类UNIX系统的教程
Apr 15 Python
Python-嵌套列表list的全面解析
Jun 08 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
微信公众号token验证失败解决方案
Jul 22 Python
python属于跨平台语言码
Jun 09 Python
python字典key不能是可以是啥类型
Aug 04 Python
python ssh 执行shell命令的示例
Sep 29 Python
Python通过format函数格式化显示值
Oct 17 Python
python两种获取剪贴板内容的方法
Nov 06 Python
python3 os进行嵌套操作的实例讲解
Nov 19 Python
分享7个 Python 实战项目练习
Mar 03 Python
Django框架中模型的用法
Jun 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
php计算年龄精准到年月日
2015/11/17 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
2017/06/06 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
2013/06/08 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
浅谈js中的bind
2019/03/18 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
python实现机器人行走效果
2018/01/29 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
法制演讲稿
2014/09/10 职场文书
处级干部考察材料
2014/12/24 职场文书
酒店宣传语大全
2015/07/13 职场文书
结婚十年感言
2015/07/31 职场文书
如何在Python项目中引入日志
2021/05/31 Python
MySQL 数据表操作
2022/05/04 MySQL
服务器SVN搭建图文安装过程
2022/06/21 Servers