1. 程式人生 > >jsonp和GET、POST的跨域原理解析及GET和POST的區別

jsonp和GET、POST的跨域原理解析及GET和POST的區別

同源策略:
    同源策略是1995年 Netscape 公司引入瀏覽器的,目前瀏覽器都是實行這個策略,
    同源策略是為了保證使用者資訊的安全,防止惡意的網站竊取資料的。
    同源指的是三個相同:協議相同、域名相同、埠號相同
但是也是因為瀏覽器同源策略的原因,前端頁面不能跨域請求所需資源
但是在日常的WEB開發中,需要進行跨域請求,常用有兩種方式可以跨域請求所需資源
1:JSONP
    JSONP是伺服器與客戶端跨源通訊的常用方法。最大特點就是簡單適用,老式瀏覽器全部支援,
    伺服器改造非常小。
    JSONP的原理是利用script標籤的src屬性可以進行不受同源策略的限制,進行跨域請求資料的屬性,在
    HTML頁面中新增一個script標籤,向伺服器傳送請求,伺服器收到請求後,返回資料,
    將資料放在指定的回撥函式中,回撥函式中可以對資料進行操作

2:GET、POST
CORS是W3C標準,它允許瀏覽器向跨源伺服器傳送AJAX請求,當瀏覽器傳送請求的時候,會在請求頭自動新增上origin欄位,值為傳送請求的頁面的所在域名,請求到達伺服器,伺服器會根據這個欄位校驗,如果這個源不在許可範圍內,會有一個正常的響應,但是響應頭部沒有Access-Control-Allow-Origin,瀏覽器報丟擲一個錯誤,會被xhr的onerror函式捕獲,但是HTTP的狀態碼也有可能是200;如果請求的型別是PUT或者DELETE等特殊的請求方法,或者content-type:application/json,那麼,這個請求為非簡單請求,瀏覽器會在傳送正式請求前先發送一個預檢請求,預檢請求中的請求頭部資訊除了origin源欄位以外,還有Access-Control-Allow—Method和Access-Control-Allow—Header,預檢請求是一個OPTION型別的請求,只要服務端通過了預檢請求,之後的請求就和簡單請求是一樣的
GET、POST是ajax請求,ajax請求是基於XMLHttpRequest物件的跨域請求方式(低版本的ie是   
 ActiveXObject物件),XMLHttpRequest是ajax的核心機制,
它是一種支援非同步請求的技術。簡單的說,也就是javascript可以及時向伺服器提出請求和處理響應,
而不阻塞使用者。達到無重新整理的效果。
GET和POST的區別:
    1.post更安全(不會作為url的一部分,不會被快取、儲存在伺服器日誌、以及瀏覽器瀏覽記錄中)
    2.post傳送的資料量更大(get有url長度限制)
    3.post能傳送更多的資料型別(get只能傳送ASCII字元)
    4.post比get慢
    5.get是冪等的,而post不是冪等的
    6.get可以被快取,post不可以被快取   

因為get請求的請求引數是放在header中(新增在連結後面),而post請求的引數是放在body中,其實url的長度限制不是get和post所決定的,而是瀏覽器有所限制,和get、post沒有基本沒有關係
get和post相比,要快,是因為get和post的請求過程不同,不多前三步都是一樣的,都是要先經過和伺服器的三次握手:
1.瀏覽器請求tcp連線(第一次握手)
2.伺服器答應進行tcp連線(第二次握手)
3.瀏覽器確認,併發送get請求頭和資料(第三次握手,這個報文比較小,所以http會在此時進行第一次資料傳送)
  get請求在第四步就會接收到了伺服器返回的資料,而post請求在第四步是接收到伺服器傳送的100 continue指令,客戶端在傳送資料請求服務端,服務端才會去返回資料,
  就是說POST比GET多進行了一次客戶端和伺服器的打交道,GET請求產生了一個TCP資料包,而POST請求產生了兩個TCP資料包