第六章 跨域問題

2021-10-10 11:06:05 字數 2568 閱讀 1157

什麼是跨域:

跨域是指跨網域名稱的訪問,一下情況都屬於跨域:

跨域原因說明 示例

網域名稱不同 www.jd.com和 www.taobao.com

網域名稱相同,埠不同 www.jd.com:8080與www.jd.com:8081

二級網域名稱不同 item.jd.com 與 miaosha.jd.com

2.為什麼有跨域問題?

跨域不一定會有跨域問題。

因為跨域問題是瀏覽器對於ajax請求的一種安全限制:乙個頁面發起的ajax請求,只能是於當前頁同網域名稱的路徑,這能有效的阻止跨域攻擊。

解決跨域問題的方案

目前比較常用的跨域解決方案有3種:

jsonp

最早的解決方案,利用script標籤可以跨域的原理實現

限制需要服務的支援

只能發起get請求

nginx 反向**

思路是:利用nginx反向**把跨域為不跨域,支援各種請求方式

缺點:需要在nginx進行額外配置,語義不清晰

cors

規範化的跨域請求解決方案,安全可靠

優勢:在伺服器端進行控制是否允許跨域,可自定義規則

支援各種請求方式

缺點:回產生額外的請求

4.cors解決跨域

1.什麼是cors

cors是乙個w3c標準,全稱是「跨域資源共享」(cross-origin resource sharing)。

它允許瀏覽器向跨源伺服器發出 xmlhttprequest 請求,從而克服了ajax只能回源使用的限制。

cros需要瀏覽器和伺服器同時支援。ie瀏覽器版本不能低於ie10。

瀏覽器端:

目前,所有瀏覽器都支援該功能(ie10以下不行),整個cors通訊過程,都是瀏覽器自動完成,不需要使用者參與。

服務端:

cors通訊和ajax沒有任何區別,因此不需要改變以前的業務邏輯,不過,瀏覽器會在請求中攜帶一些頭資訊,我們需要以此判斷是否執行其跨域,然後在響應頭中加入一些資訊即可,這一般通過過濾器完成即可。

2.原理

簡單請求:

同時要滿足以下兩大條件,就屬於簡單請求:

1)請求的方法是以下三種方法之一:

head

getpost

2)http的頭資訊不超過以下幾種字段

accept

accept-language

content-language

last-event-id

當瀏覽器發現ajax請求是簡單請求時,會在請求的頭部攜帶乙個字段:origin

orign 中會指出當前請求屬於哪個域(協議+網域名稱+埠)。服務會根據這個值決定是否允許其跨域。如果伺服器允許跨域,需要在返回的相應頭中攜帶下面資訊:

access-control-allow-origin: 

access-control-allow_credentials: true

access-control-allow-origin: 可接受的域,是乙個居停網域名稱或者*,代表任意

特殊請求:

不符合簡單請求的條件,會被瀏覽器判定為特殊請求,例如請求方式為put。

預檢請求

特殊請求會在正式通訊之前,增減一次http查詢請求,成為「預檢」請求(preflight)。

瀏覽器先詢問伺服器,當前網頁所在的網域名稱是否在伺服器的許可白名單之中,以及可以使用哪些http動詞和頭資訊字段。只有得到肯定答覆,瀏覽器才會發出正式的xmlhttprequest請求,否則報錯。

乙個預檢樣板:

user-agent:mozilla/5.0...與簡單的請求相比,除了origin以外,多了兩個頭:

access-control-request- method : 接下來會用到的請求方式,比如put

access-control-request-headers: 會額外用到的頭資訊

預檢請求的相應

服務的受到預檢請求,如果許可跨域,會發出響應:

#如果是false,允許跨域不允許訪問cookie

access-control-allow-methods: get,post,put

access-control-allow-headers: x-custom-header

access-control-max-age: 172800 #當前預檢請求的有效期

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

第六章 指標

1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...

第六章總結

6.1 使用滑鼠 6.1.1 滑鼠時間和滑鼠訊息 根據使用者操作滑鼠時滑鼠的位置,滑鼠訊息分為兩類 客戶區滑鼠訊息和非客戶區滑鼠訊息。1.客戶去滑鼠訊息 2.當滑鼠游標位於視窗的使用者區時,將生成客戶滑鼠訊息。滑鼠訊息和鍵盤訊息有所不同,windows 只將鍵盤有訊息傳送給具有輸入極點的視窗,但滑鼠...