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 根据pid杀死相应进程的方法
Jan 16 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
微信跳一跳辅助python代码实现
Jan 05 Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 Python
PyQt5主窗口动态加载Widget实例代码
Feb 07 Python
Pyinstaller将py打包成exe的实例
Mar 31 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
Django重设Admin密码过程解析
Feb 10 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
Python tcp传输代码实例解析
Mar 18 Python
Python文件时间操作步骤代码详解
Apr 13 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
Thinkphp中的volist标签用法简介
2014/06/18 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
php单例模式实现方法分析
2015/03/14 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
jQuery代码实现表格中点击相应行变色功能
2016/05/09 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
如何编写jquery插件
2017/03/29 jQuery
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
Django 迁移、操作数据库的方法
2019/08/02 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
初中三好学生事迹材料
2014/01/13 职场文书
大学生创业感言
2014/01/25 职场文书
班级年度安全计划书
2014/05/01 职场文书
汽车销售员岗位职责
2015/04/11 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
Python+DeOldify实现老照片上色功能
2022/06/21 Python