跨域浏览POST请求需事先发送option请求难题解决计划方案


实践活动自然环境

Win 10

 

Python 3.5.4

 

Django-2.0.13.tar.gz

官网下载详细地址:

https://www.djangoproject.com/download/2.0.13/tarball/

 

难题叙述

应用POST请求浏览Django后端开发API时全自动先发送option请求,随后才实行POST请求

 

根本原因

跨域共享资源(CORS)体制造成 。

 

电脑浏览器将CORS请求分为两大类:简易请求(simple request)和非简易请求(not-so-simple request) 。

要是另外考虑下列两大标准 ,就归属于简易请求,不然就是是非非简易请求。

1、请求方式是下列三种方式之一:

HEAD

GET

POST  

 

2、HTTP的头信息不超过下列几类字段名:

Accept

Accept-Language

Content-Language

Last-Event-ID

Content-Type(其值只仅限于application/x-www-form-urlencoded 、multipart/form-data、text/plain)

 

当请求存有跨域共享资源(CORS),而且是是非非简易请求 ,就会开启CORS的预检请求(preflight);"预检"请求用的请求方式是OPTIONS,假如请求OK,才会再度发送总体目标实际操作请求。

 

具体开发设计全过程中 ,后台管理选用token检测体制,前台接待发送请求务必将token放进Request Header中,那麼就必须传送自定Header信息、或者请求头里的Content-Type设定为"application/json" ,就会产生非简易请求 。 可是许多 情况下,大家并不期待电脑浏览器那么做,反复的请求 ,一方面是提升网络服务器工作压力 ,另一方面,等同于提升了请求响应速度。 

 

解决方案 

一种较为适合的解决方案便是提升回应头“Access-Control-Max-Age”来操纵电脑浏览器在多久内(企业为秒)不用在请求时发送预检请求,进而降低多余的预检请求。

 

分布式数据库编码以下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = '授客'
from django.utils.deprecation import MiddlewareMixin
class PublicAccessControlMiddleware(MiddlewareMixin):
    def process_request(self, request):
        pass
    def process_response(self, request, response):
        response['Access-Control-Max-Age'] = 86400 #3600*24小时 = 86400秒	,即告知电脑浏览器,缓存文件预检結果24小时,即对于同一URL请求	,发送第一个OPTION请求往后面24小时内已不发送OPTION请求	。
    return response

  

 

 

文章来源于网络,如有侵权请联系站长QQ61910465删除

本文版权归趣快排www.sEoguruBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ✈61910465