CORS跨域問題

一萌焰、什么是CORS

CORS(Cross-Origin Resource Sharing 跨源資源共享)颤霎,當(dāng)一個(gè)請(qǐng)求url的協(xié)議猪钮、域名、端口三者之間任意一與當(dāng)前頁(yè)面地址不同即為跨域述雾。

二街州、問題描述

本人最近在寫商城的CMS 系統(tǒng)時(shí),CMS訪問API 就要到了跨域問題:

467AFF64-F9EF-4A6A-AFEE-4256FEA56692.png
  • 跨域點(diǎn):
    CMS 頁(yè)面是通過http協(xié)議訪問的玻孟,而CMS要訪問的接口卻在https上唆缴,
    url 協(xié)議不同,導(dǎo)致跨域黍翎。而且還報(bào)了了一個(gè)訪問接口的404錯(cuò)誤面徽,
    后來(lái)查了一下,當(dāng)瀏覽器檢查到有跨域的問題匣掸,會(huì)對(duì)訪問的接口做一個(gè)判斷斗忌,如果是簡(jiǎn)單的接口质礼,則直接訪問,如果是復(fù)雜的接口织阳,則需要先發(fā)送一個(gè)option請(qǐng)求,但是我的路由里面沒有定義該接口的option請(qǐng)求 砰粹,因此報(bào)了一個(gè)404錯(cuò)誤
WechatIMG1.jpeg
  • 規(guī)避
    后來(lái)我想唧躲,我的CMS和API都是在同一域名下,不應(yīng)該存在協(xié)議不同問題碱璃,后來(lái)我又重新用https協(xié)議訪問了一下CMS弄痹。果然問題就解決了。

三嵌器、由跨域引起的思考

雖然我現(xiàn)在這個(gè)跨域的問題解決了肛真,但是如果后續(xù)CMS 和API做分離,還是會(huì)遇到跨域問題爽航,所以這個(gè)問題必須解決蚓让。其實(shí)大多數(shù)跨域問題,只要在訪問的接口中寫入下面的一段話就可以解決:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
header('Access-Control-Allow-Methods: GET,POST');

但是正如上面所說(shuō)讥珍,有些瀏覽器在檢查到跨域問題時(shí)历极,會(huì)有兩次請(qǐng)求,第一次是option衷佃,如果放回200趟卸,然后才會(huì)正式去訪問接口。所以需要在有跨域的地方氏义,都加上一個(gè)對(duì)option請(qǐng)求的處理锄列,但是如果項(xiàng)目的接口太多,在每個(gè)接口都加這樣一個(gè)判斷惯悠,顯然有點(diǎn)費(fèi)時(shí)費(fèi)力邻邮,此時(shí),AOP思想又再次登場(chǎng)了吮螺。

四饶囚、利用AOP思想,結(jié)合CORS,解決跨域問題

我目前做的微信商城項(xiàng)目是基于thinkPHP5鸠补,thinkPHP5對(duì)AOP有較好的支持萝风,所謂的AOP 就是面向切面編程的思想。
在thinkPHP的application目錄下紫岩,有一個(gè)tags.php文件规惰,這個(gè)能保證加載全局的函數(shù)。

4.1

如下圖所示泉蝌,將CORS跨域處理文件的路徑定義到app_init下歇万,這就能保證揩晴,tp5框架在初始化就加載這個(gè)跨域處理函數(shù)

屏幕快照 2017-06-30 下午12.06.55.png

4.2

在application/api下新建一個(gè)behavior文件,并新建一CORS.php跨域處理文件

屏幕快照 2017-06-30 下午12.12.14.png

具體代碼如下:


namespace app\api\behavior;


class CORS
{
    //對(duì)應(yīng)tags.php的app_init  使用駝峰命名贪磺,不能修改方法名
    public function appInit(&$params)
    {
        header('Access-Control-Allow-Origin: *');
        header("Access-Control-Allow-Headers: token,Origin, X-Requested-With, Content-Type, Accept");
        header('Access-Control-Allow-Methods: POST,GET');
        if(request()->isOptions()){
            exit();
        }
    }
}

五硫兰、驗(yàn)證

WechatIMG2.jpeg

為了構(gòu)造跨域,我的cms 還是用http格式訪問寒锚,對(duì)應(yīng)的https的api接口
驗(yàn)證成功劫映,在瀏覽器判斷有跨域問題,首先會(huì)發(fā)起一個(gè)options請(qǐng)求刹前,在options請(qǐng)求被tp處理并返回200后泳赋,才開始正式訪問數(shù)據(jù)。并成功請(qǐng)求到數(shù)據(jù)喇喉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祖今,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拣技,更是在濱河造成了極大的恐慌千诬,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件过咬,死亡現(xiàn)場(chǎng)離奇詭異大渤,居然都是意外死亡掸绞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門衔掸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人敞映,你說(shuō)我怎么就攤上這事较曼≌裨福” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵冕末,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我档桃,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任蔑舞,我火速辦了婚禮,結(jié)果婚禮上攻询,老公的妹妹穿的比我還像新娘从撼。我一直安慰自己蜕窿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布桐经。 她就那樣靜靜地躺著,像睡著了一般浙滤。 火紅的嫁衣襯著肌膚如雪阴挣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天纺腊,我揣著相機(jī)與錄音畔咧,去河邊找鬼。 笑死揖膜,一個(gè)胖子當(dāng)著我的面吹牛誓沸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播壹粟,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拜隧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了趁仙?” 一聲冷哼從身側(cè)響起洪添,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雀费,沒想到半個(gè)月后干奢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盏袄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年忿峻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辕羽。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逛尚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逛漫,到底是詐尸還是另有隱情黑低,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站克握,受9級(jí)特大地震影響蕾管,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菩暗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一掰曾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧停团,春花似錦旷坦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至舌胶,卻和暖如春捆蜀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幔嫂。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工辆它, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人履恩。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓锰茉,卻偏偏與公主長(zhǎng)得像切心,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子昙衅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容