初識jsonp
jsonp 全名為JSON with Padding,是為了解決跨域請求資源而產生的解決方案。很多時候我們需要在客戶端取得伺服器資料進行操作,一般我們會使用ajax webservice做此事,但是如果我們希望取得的資料和目前頁面並不是一個網域,著名的同源策略(不同網域的客戶端腳本在沒明確授權的情況下,不能讀寫對方的資源)會因為安全性原因決絕請求,也就是我們不能直接向其它網域發送請求以取得資源。
在localhot域上有一個books.php,裡麵包含腳本對test.com域的books.php發送get請求,希望獲取其book列表資源,這就是一個跨域請求資源
jsonp原理
雖然有同源策略的限制,但是並不是HTML上所有資源都必須是同一個域的,我們常見的頁面為了節省流量或加載速度採用Google或微軟的jQuery CDN,在頁面上我們可以這樣寫就可以引用jQuery了
iframe、img、style、script等元素的src屬性可以直接向不同域請求資源,jsonp正式利用script標籤跨域請求資源的
程式碼如下:
當然使用jsonp會在一定程度上造成安全性問題,如果請求的站點不是新人站點,那麼可能會在返回的方法調用中包含一些惡意代碼。所以盡量向信任的網站發送請求。另外xss也常會利用jsonp向網站注入惡意程式碼。