前端目錄
前後端分離是當前常見的開發模式,此時瀏覽器請求前端靜態資源和後端服務資料的目標位址是不同的。這就是我們常見的跨域問題。
同源策略是瀏覽器的一種安全機制。不遵守同源策略的操作是被禁止的,這就是我們所說的跨域。
ps: css、js和等靜態資源是不受同源策略限制的。
cors跨域解決方案
cors是http協議的一部分,由瀏覽器和伺服器共同完成:
目前所有瀏覽器都支援該協議,ie瀏覽器不能低於ie10。
伺服器需要實現cors介面。
cors實現具體可分為以下兩種情況:
簡單cors請求:
ps:
上圖(2)中,當瀏覽器發現請求跨域時,自動在請求header增加origin欄位,指明本次請求的源位址。伺服器也是根據origin欄位,確定是否允許跨域請求。
上圖(3.1)中,如果伺服器允許跨域,會在響應header新增以下字段:
1、access-control-allow-origin欄位:必選。它的值可以是請求時origin欄位的值,或者是乙個』*』,表示接受任意網域名稱的請求。
2、access-control-allow-credentials:可選。表示是否允許請求時帶上cookie。如果要帶上cookie資訊,則ajax的withcredentials屬性必須設定為true,且access-control-allow-origin必須明確指明源位址。
3、access-control-expose-headers:cors請求時,ajax物件的getresponseheader()方法只能拿到6個基本字段:cache-control、content-language、content-type、expires、last-modified、pragma。如果想拿到其他字段,就必須在access-control-expose-headers裡面指定。
上圖(4.2)中,如果瀏覽器發現響應header沒有access-control-allow-origin欄位,則會丟擲異常,會被ajax catch。
非簡單cors請求:
ps:
非簡單請求在正式請求前,會進行一次預檢請求,如果預檢通過了,則後續請求流程就是簡單請求。
預檢請求的請求方法是option,包含以下三個主要header欄位:
access-control-request-method:指明cors請求會涉及的請求方法。
access-control-request-headers: 指明cors請求會額外傳送的header欄位。
access-control-allow-methods:指明伺服器支援的所有跨域請求的方法。
access-control-allow-headers:指明伺服器支援的所有header欄位。
access-control-allow-credentials:是否支援帶上cookie。
access-control-max-age:指定本次預檢請求的有效期,單位為秒。
通過nginx**
前端的正則使用(原理篇)
本篇接上篇的基礎篇,是對基礎篇從原理上加以理解。捕獲組就是把正規表示式中的子表示式匹配的內容,儲存到記憶體中以數字編號的組裡,方便後面引用。編號規則指的是以數字為捕獲組進行編號的規則。規則中編號為0的捕獲組,指的是正規表示式整體。捕獲組通過從左到右計算其左開括號來編號 舉例 正規表示式可以用來匹配格...
倒車雷達原理篇
往後倒一點,再往後,打方向盤,打多了,回一點再倒,好,停!相信一般的車主在停車場泊位時,都會遇到車輛保管員的 熱情招呼 車技純熟的倒 也與人工提示配合默契 車技一般 方向感較差的,就經常使負責指揮的那位人士高度緊張,脾氣急躁的還少不了擠兌車主幾句。可是,並不是所有車主都有幸得到 人工倒車指引,比如說...
iOS知識原理篇
weak策略表明該屬性定義了一種 非擁有關係 nonowning relationship 為這種屬性設定新值時,設定方法既不保留新值,也不釋放舊值。此特質同assign類似 然而在屬性所指的物件遭到摧毀時,屬性值也會清空 nil out runtime對註冊的類,會進行布局,會將 weak 物件放...