jsonp原理,跨域请求头处理

本文深入讲解了两种跨域请求处理方法:JSONP和添加请求头。详细解释了JSONP的工作原理,包括如何绕过同源策略限制,以及其局限性。同时,介绍了如何通过在Django中间件中添加Access-Control-Allow-Origin等头信息来处理简单和复杂跨域请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.jsonp(解决跨域)思路介绍:

因浏览器的同源策略不会拦截link标签内的src请求,所以利用这一点,我们把后端开放的接口路径放在src,

其在发送请求后会自动接收返回的东西,所以我们可以给要返回的内容进行特殊的处理;具体做法:

1. 使用个变量加括号的形式,把要返回的内容放入括号内

       列如: return HttpResponse( "handlerResponse('返回内容')" )

2. html页面script标签对内放置个函数,让函数名等同于后端传来的变量名即可

 function handlerResponse(data) {   # data参数接收的就是后端真正想要返回的内容.

    // do something....

    alert(data)

}

3. 原理: 前端src出接收到的内容就是handlerResponse('返回内容')这种形式,html页面内又定义了

   handlerResponse为一个函数名,加括号就是调用的形式,正好会把其所要传送的东西以参数的形式被

   data所接收,此时在函数内操作处理即可.

缺点: jsonp只能发送get请求,无法处理post请求,get请求时无法指定contentytype

 

.加请求头方式:

我们先了解下跨域请求的分类(简单和复杂):

 

HTTP方法是下列方法之一

  HEADGETPOST

HTTP头信息不超出以下几种字段

  AcceptAccept-LanguageContent-LanguageLast-Event-ID

  Content-Type只能是下列类型中的一个

    application/x-www-from-urlencoded   # form表单提交数据

    multipart/form-data  # 权限类型

    text/plain  # 文本类型

任何一个不满足上述要求的请求,即会被认为是复杂请求~~

复杂请求会先发出一个预请求,我们也叫预检,即OPTIONS请求~~

原理,在请求返回给浏览器前,给响应内容加上头部信息,让浏览器放行即可.

 

from django.utils.deprecation import MiddlewareMixin
class MyCors(MiddlewareMixin):
    def process_response(self, request, response):
        response["Access-Control-Allow-Origin"] = "*"  # 放行所有简单请求
        if request.method == "OPTIONS":
            # 复杂请求会先发预检
            response["Access-Control-Allow-Headers"] = "Content-Type"  # 内容类型
            response["Access-Control-Allow-Methods"] = "PUT,PATCH,DELETE" # 复杂请求方式
        return response

转载于:https://www.cnblogs.com/quzq/p/10023256.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值