• yii2 ajax 跨域调用url behavior cors


    CORS是一种允许当前域(domain)的资源(比如html/js/web service)被其他域(domain)的脚本请求访问的机制,通常由于同域安全策略(the same-origin security policy)浏览器会禁止这种跨域请求。
    CORS也有一些限制,两种模型可以实现:
    1.简单模型
    只支持getpost,不支持putdelete等,例如返回 Access-Control-Allow-Origin:*,但是不允许自定义header且会忽略cookies,且post数据格式有限制,只支持 ‘text/plain','application/x-www-urlencoded'and'multipart/form-data',其 中’text/plain'默认支持,后面两种需要下面的预检请求和服务器协商。
    2.协商模型/预检请求(Preflighted Request)
    举例:浏览器发出PUT请求,OPTION请求返回Access- Control-Allow-Origin:*,Access-Control-Allow-Methods:’PUT’,服务器同意所有域的PUT请 求,浏览器收到并继续发出真正的PUT请求,服务器响应并再次返回Access-Control-Allow-Origin:*,允许浏览器的脚本执行服 务器返回的数据。
    地址   http://www.yiichina.com/doc/guide/2.0/structure-filters

    yiifiltersCors

    跨域资源共享 CORS 机制允许一个网页的许多资源(例如字体、JavaScript等) 这些资源可以通过其他域名访问获取。 特别是JavaScript's AJAX 调用可使用 XMLHttpRequest 机制,由于同源安全策略该跨域请求会被网页浏览器禁止. CORS定义浏览器和服务器交互时哪些跨域请求允许和禁止。

    yiifiltersCors 应在 授权 / 认证 过滤器之前定义,以保证CORS头部被发送。

    use yiifiltersCors;
    use yiihelpersArrayHelper;
    
    public function behaviors()
    {
        return ArrayHelper::merge([
            [
                'class' => Cors::className(),
            ],
        ], parent::behaviors());
    }
    

    Cors 可转为使用 cors 属性。

    • cors['Origin']: 定义允许来源的数组,可为['*'] (任何用户) 或 ['http://www.myserver.net', 'http://www.myotherserver.com']. 默认为 ['*'].
    • cors['Access-Control-Request-Method']: 允许动作数组如 ['GET', 'OPTIONS', 'HEAD']. 默认为 ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'].
    • cors['Access-Control-Request-Headers']: 允许请求头部数组,可为 ['*'] 所有类型头部 或 ['X-Request-With'] 指定类型头部. 默认为 ['*'].
    • cors['Access-Control-Allow-Credentials']: 定义当前请求是否使用证书,可为 true, falsenull (不设置). 默认为 null.
    • cors['Access-Control-Max-Age']: 定义请求的有效时间,默认为 86400.

    例如,允许来源为 http://www.myserver.net 和方式为 GET, HEADOPTIONS 的CORS如下:

    use yiifiltersCors;
    use yiihelpersArrayHelper;
    
    public function behaviors()
    {
        return ArrayHelper::merge([
            [
                'class' => Cors::className(),
                'cors' => [
                    'Origin' => ['http://www.myserver.net'],
                    'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'],
                ],
            ],
        ], parent::behaviors());
    }
    

    可以覆盖默认参数为每个动作调整CORS 头部。例如,为login动作增加Access-Control-Allow-Credentials参数如下所示:

    use yiifiltersCors;
    use yiihelpersArrayHelper;
    
    public function behaviors()
    {
        return ArrayHelper::merge([
            [
                'class' => Cors::className(),
                'cors' => [
                    'Origin' => ['http://www.myserver.net'],
                    'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'],
                ],
                'actions' => [
                    'login' => [
                        'Access-Control-Allow-Credentials' => true,
                    ]
                ]
            ],
        ], parent::behaviors());
    }
    
  • 相关阅读:
    Python Scrapy爬虫(下)
    Hadoop HDFS
    Spark核心 RDD(上)
    自定义日期格式------SimpleDateFormat
    常用类-- 使用comparator实现定制排序
    自定义日期格式------DateTimeFormatter
    多线程-方式四使用线程池
    多线程-方式三实现Callable接口方式 JDK5.0新增
    解决线程安全------lock锁
    死锁问题
  • 原文地址:https://www.cnblogs.com/yangbanban/p/5065735.html
Copyright © 2020-2023  润新知