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利用多进程将大量数据放入有限内存的教程
Apr 01 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 Python
Python开启线程,在函数中开线程的实例
Feb 22 Python
Python基础之函数的定义与使用示例
Mar 23 Python
如何使用python操作vmware
Jul 27 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
python实现的分层随机抽样案例
Feb 25 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
django和flask哪个值得研究学习
Jul 31 Python
Python实现照片卡通化
Dec 06 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 身份证号验证函数
2009/05/07 PHP
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
Vue常用指令详解分析
2018/08/19 Javascript
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
Python isinstance判断对象类型
2008/09/06 Python
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
Python 递归函数详解及实例
2016/12/27 Python
python利用不到一百行代码实现一个小siri
2017/03/02 Python
python的中异常处理机制
2018/08/30 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
Collection和Collections的区别
2016/05/02 面试题
J2EE中常用的名词进行解释
2015/11/09 面试题
教师档案管理制度
2014/01/23 职场文书
精彩的英文自荐信
2014/01/30 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
部门活动策划方案
2014/08/16 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
js之ajax文件上传
2021/05/13 Javascript
Python绘制散乱的点构成的图的方法
2022/04/21 Python