瓶配置歌珥跨域的实现

  

  

瓶配置歌珥跨域的实现

  

跨域是指:浏览器一个从服务器B获取的静态资源,包括Html, Css, javascript,然后在Js中通过Ajax访问C服务器的静态资源或请求。即:浏览器从B服务器拿的资源,资源中想访问服务器C的资源。

  

同源策略是指:浏览器一个从服务器B获取的静态资源,包括Html, Css, javascript,为了用户安全,浏览器加了限制,其中的Js通过Ajax只能访问B服务器的静态资源或请求。即:浏览器一个从哪拿的资源,那资源中就只能访问哪。

  

同源是指:同一个请求协议(如:Http或Https),同一个Ip,同一个端口,3个全部相同,即为同源。

  

  

跨域的这种需求还是有的,因此,W3C组织制定了一个跨源资源共享规范,简写为<代码>歌珥>   

歌珥需要在后端应用进行配置,因此,是一种跨域的后端处理方式,这么做也容易理解,一个你不认识的源来访问你的应用,自然需要应用进行授权。除了后端处理方式,也有前端的解决方案,如:JSONP,因这里我们主要讲解瓶对歌珥的配置,暂不对前端解决方案进行详细说明。

  

  

跨域分为以下3种

  

           名称   英文名   说明               简单请求   简单的请求   发起的Http请求符合:
  1.无自定义请求头,
  2.负责人请求动词为获得或发布之一,
  3.动词为POST时,内容类型是应用程序/x-www-form-urlencoded,
  多部分/格式或文本/平原之一         预检请求   起飞前的请求   发起的Http请求符合其中之一:
  1.包含了自定义请求头,
  2.请求动词不是,头或帖子,
  3.动词是文章时,内容类型不是应用程序/x-www-form-urlencoded,
  多部分/格式或文本/平原。即:简单请求的相反         凭证请求   请求与证书   发起的Http请求中带有凭证                     

  

  

瓶配歌珥跨域,使用Flask-CORS包,详细文档,参见:https://flask-cors.readthedocs.io/en/latest/总的来说,Flask-CORS包也提供了两种方式

  

                    方式   范围   说明               @cross_origin装饰器   配置单个路由   适用于配置特定的API接口         歌珥函数   配置全局API接口   适用于全局的API接口配置            

  

4.1安装flask-cors

        pip安装flask-cors      

4.2使用@cross_origin装饰器

        @app.route (“/?   @cross_origin ()   def helloWorld ():   返回“你好,cross-origin-world !”      

           装饰器参数   类型   头字段   说明               起源   列的表,字符串或正则表达式   Access-Control-Allow-Origin   配置允许跨域访问的源,
  *表示全部允许         方法   列的表,字符串   Access-Control-Allow-Methods   配置跨域支持的请求方式,
  如:GET、POST         expose_headers   列的表,字符串   Access-Control-Expose-Headers   自定义请求响应的头信息         allow_headers   列的表,字符串或正则表达式   Access-Control-Request-Headers   配置允许跨域的请求头         supports_credentials   布尔值   Access-Control-Allow-Credentials   是否允许请求发送饼干,
  假是不允许         max_age   整数,字符串   Access-Control-Max-Age   预检请求的有效时长            

  

4.3使用歌珥函数

  

4.3.1应用全局配置

        应用=瓶(__name__)   歌珥=歌珥(应用程序、资源={r/api/* ":{“起源”:“*”}})      @app.route (“/api/v1/用户”)   def list_users ():   返回“用户例子”      

4.3.2单独蓝图配置

        api_v1=蓝图(api_v1, __name__)   歌珥(api_v1)      @api_v1.route (“/api/v1/用户/?   def list_users ():   返回“用户例子”      

瓶配置歌珥跨域的实现