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编写脚本获取手机当前应用apk的信息
Jul 21 Python
python实现根据月份和日期得到星座的方法
Mar 27 Python
Python中实现参数类型检查的简单方法
Apr 21 Python
Python下载指定页面上图片的方法
May 12 Python
Python面向对象编程基础解析(二)
Oct 26 Python
python放大图片和画方格实现算法
Mar 30 Python
matplotlib subplots 设置总图的标题方法
May 25 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
selenium+python配置chrome浏览器的选项的实现
Mar 18 Python
详解python中的lambda与sorted函数
Sep 04 Python
用python 绘制茎叶图和复合饼图
Feb 26 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 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判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
PHP中PDO的错误处理
2011/09/04 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python实现翻转数组功能示例
2018/01/12 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
python isinstance函数用法详解
2020/02/13 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
浅谈css3中的前缀
2016/07/20 HTML / CSS
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
省优秀教师事迹材料
2014/01/30 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
消防应急演练方案
2014/02/12 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
文化产业实施方案
2014/06/07 职场文书
基层党员对照检查材料
2014/09/24 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL