博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django基础-跨域操作jsonp/cors
阅读量:6817 次
发布时间:2019-06-26

本文共 4263 字,大约阅读时间需要 14 分钟。

什么是跨域

所谓的跨域就是进行不用域名内的请求,比如我在A域名想访问B域名的内容就是一种跨域的行为。

但是在我们浏览器端会有一个同源策略的设置,这个同源策略只对Ajax请求有限制,如果你通过Ajax请求发送数据,在被访问的一端能够接受访问请求并且进行处理后返回给浏览器,但是浏览器不进行接收,所以不能进行跨域请求。

我们知道浏览器会对Ajax请求进行同源策略但是对带有src功能的标签没有进行限制。
一个方法可以解决这个同源策略的问题,方法是:设置通过带有src的标签去访问其他域名的内容。

跨域方法:jsonp

一、设置本地配置和Django配置文件

1、设置本地配置和Django配置文件

mac:cd /etc;vim hosts

1 127.0.0.1   www.s4.com2 127.0.0.1   www.s5.com
hosts

2、设置Django配置文件settings的内容

ALLOWED_HOSTS = ['www.s4.com',]

二、JOSNP(自动动态生成标签)

1、JOSNP自动动态生成带有src的标签(html)(通过带有src的标签进行访问)

1 ==============================================通过src进行访问 html========================================= 2  3  4  5     
6 Title 7 8 9 {
#这个是josnp采用的方式 要求客户端和服务端进行约束 自己动态创建标签#}10 function getUsers() {11 {
#定义一个点击函数#}12 var tag =document.createElement('script');13 {
#创建一个script标签,name=tag#}14 tag.src='http://www.s4.com:8010/users/?callback=bbb';15 {
#通过tag.src设置访问路劲,这个是get请求把数据放在url上#}16 {
# tag.src='http://www.s4.com:8010/users/?funcname=bbb';#}17 document.head.appendChild(tag);18 {
#在把名字等于tag的标签添加到请求头中#}19 }20 21 22
html

2、JOSNP自动动态生成带有src的标签(views)

1 from django.shortcuts import render,redirect,HttpResponse 2 import json 3 # Create your views here. 4   5 def users(request): 6     v =request.GET.get('callback') 7     # v =request.GET.get('funcname') 8     print('请求来了') 9     user_list=[10         'alex','eric','egon'11     ]12     user_list_str=json.dumps(user_list)13     temp ='%s(%s)' %(v,user_list_str)14     print(temp)15     return HttpResponse(temp)
Views

三、JOSNP(JQuery)

1、JOSNP 通过JQuery本身的方式访问(html)

1 ====================================通过JQuery访问 html=================================================== 2  4  5     
6 Title 7 8 9 {#通过JQuery进行跨域请求,只要遵循JQuery标准就能成功访问#}10 function getUsers() {11 {#定义一个点击函数#}12 $.ajax({13 {#通过Ajax 向http://www.s4.com:8010/users/发送请求#}14 url: 'http://www.s4.com:8010/users/',15 type: 'POST',16 {#发送方式#}17 dataType: 'JSONP',18 {#设置JSONP模式#}19 jsonp: 'funcname',20 {#Jsonp的值是funcname#}21 jsonpCallback: 'bbb'22 {#设置后台的函数名#}23 })24 25 function bbb(arg) {26 console.log(arg)27 }28 29 30 31
html

2、JOSNP 通过JQuery本身的方式访问(views)

1 from django.shortcuts import render,redirect,HttpResponse 2 import json 3 # Create your views here. 4   5 def users(request): 6     v =request.GET.get('callback') 7     # v =request.GET.get('funcname') 8     print('请求来了') 9     user_list=[10         'alex','eric','egon'11     ]12     user_list_str=json.dumps(user_list)13     temp ='%s(%s)' %(v,user_list_str)14     print(temp)15     return HttpResponse(temp)
Views

跨域方法:CORS(跨域资源共享)

一、CORS(一种不需要通过别的方式去访问其他域名的方式)

cors 的原理是访问其他域名的内容,在执行完成后返回给浏览器时,告知浏览器不对Ajax请求进行同源限制

1、cors简单访问(html)

1  2  3  4     
5 Title 6 7 8 9
    10 11 22 23
    Views

    2、cors简单的访问(views)

    在访问其他域名的内容并执行完成后,返回一个响应头,响应头内有告知浏览器不进行Ajax的同源策略的方法。

    1 from django.shortcuts import render,redirect,HttpResponse 2 import json 3 # Create your views here.def lsd_users(request): 4     user_list = [ 5         'alex', 'eric', 'egon' 6     ] 7     print('请求来了!') 8     user_list_str=json.dumps(user_list) 9     obj=HttpResponse(user_list_str)10     obj['Access-Control-Allow-Origin']="http://www.s5.com:8100"11     #  反会给浏览器已给响应头,告诉浏览器这个API不执行同源策略12     return obj
    Views

    3、cors复杂的访问(html)

    1  2  3  4     
    5 Title 6 7 8 9
      10 11 23 24
      View Code

      4、cors复杂的访问(views)

      复杂的访问请求要先进行一个预检,看下什么样的请求方式和请求域名可以进行访问,返回给浏览器浏览器在判断是不是和预检的需求一致,如果一致就可以访问,再次返回给浏览器时设置响应头,响应头内有告知浏览器不进行Ajax的同源策略的方法。

      1 from django.shortcuts import render,redirect,HttpResponse 2 import json 3 # Create your views here 4 def new_users(request): 5     print(request.method) 6     # 打印请求方式 7     user_list = [ 8         'alex', 'eric', 'egon' 9     ]10     if request.method=='OPTIONS':11         # 判断请方式是不是一种options请求12         print('预检....')13         obj=HttpResponse()14         obj['Access-Control-Allow-Origin']='*'15         # 所有域名的都可以进行访问16         obj['Access-Control-Allow-Methods']='DELETE'17         # 返回请求的方式,并告知浏览器不进行同源策略18         return obj19     obj = HttpResponse('asdfasdf')20     # 再次请求来的时候返回内容21     obj['Access-Control-Allow-Origin'] = "*"22     # 允许所有的域名进行访问23     return obj
      Views

       

      end 

      转载于:https://www.cnblogs.com/adamans/articles/7144290.html

      你可能感兴趣的文章
      Android 开发工具下载中文网站
      查看>>
      Redis 列表处理
      查看>>
      android 股票数据通过日K获取周K的数据 算法 源码
      查看>>
      关于Linux运维的一些题目总结
      查看>>
      原生js实现查询天气的小应用
      查看>>
      分享两个必应壁纸接口,可用来获取高质量壁纸和故事
      查看>>
      tomcat启动脚本
      查看>>
      ASP.NET-FineUI开发实践-10
      查看>>
      小猪决定做一件尝试
      查看>>
      linux下jdk的安装:
      查看>>
      Ajax_ajax模板引擎 ---tmplate.js处理数据和标签拼接
      查看>>
      微信小程序-下拉松开弹不回去顶部留一段空白
      查看>>
      [摘录]感受弗兰克尔的故事
      查看>>
      jmeter响应时间与postman响应时间为什么不一样?
      查看>>
      HTTPonly属性
      查看>>
      显示磁盘信息
      查看>>
      基于spark和sparkstreaming的word2vec
      查看>>
      JPA多对一单向关联
      查看>>
      系统查看硬件相关信息命令
      查看>>
      sublime 3 text 中运行Java
      查看>>