Thinkphp5.1容許uni-app的H5跨域請求接口解決方法

情景:

     uni-app使用vue框架開發混合APP,雖然APP或者小程序沒有跨域,但但願就是寫完這個既有H5,又有APP,小程序等,因此能經過後端解決跨域最好。可是不知道是vue的緣由仍是什麼,在PHP接口基類中添加了header頭徹底不起做用。官方給出的方法也有,具體能夠看https://uniapp.dcloud.io/api/request/request。php

    

分析:

 1. 之前的作法是在接口添加如下部分就能夠解決ajax的跨域(雖然也用過jsonp)。vue

// 指定容許其餘域名訪問  
        // header('Access-Control-Allow-Origin:*');
        // // 響應類型  
        // header('Access-Control-Allow-Methods:*');
        // // 響應頭設置  
        // header('Access-Control-Allow-Headers:*');

 

2.  添加後請求,報錯「Access to XMLHttpRequest at 'http://www.unxxx.com/api/v1.user/login' from origin 'http://192.168.2.121:8000' has been blocked by CORS policy: Request header field token is not allowed by Access-Control-Allow-Headers in preflight response.」;自定義的請求頭token不被容許。由於接口請求須要帶上token,把token放在自定義請求頭上再傳到PHP。ajax

 

3. 因而就將token改成普通參數方式傳遞,但依然報錯,Access to XMLHttpRequest at 'http://www.xxxxxx.com/api/v1.user/login' from origin 'http://192.168.2.121:8000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource。json

 

4. 以上能夠看出就是普通跨域報錯了,而後看一下瀏覽器的請求響應報文。小程序

 

5. 發現返回過來的頭部信息徹底不是本身在接口上指定的,抱着試一試的念頭,把跨域請求放到了TP5.1的入口文件\public\index.php,居然就能夠正常請求了,目前我也不清楚緣由是什麼。後端

 

待續

後面就能夠加域名白名單等等。坑雖然避開了,可是問題並無解決 ,若是你們有知道緣由的能夠加我微信一塊兒談論。api

 

相關文章
相關標籤/搜索