㈠ 前端的跨域問題理解
前端真的的是亂的一筆。--來自iOS開發者的一聲哀鳴
需要把前端看成兩部分,一部分是頁面,另一部分是介面(或者加數據資源)。前端頁面中調介面是有限制的,同源策略(SOP)要求我們調用的介面必須和頁面在同一域名下,說是為了保證數據的安全。所謂同源:協議+域名+埠
但實際情況是,在前後端分離的大趨勢下,好多頁面和介面的伺服器分布在不同的域名下。比如在開發時,前端頁面分為本地環境、測試環境、模擬環境、正式環境,而介面也分為測試環境、模擬環境、正式環境,當然也可以有本地環境。他們在不同的域名下或IP下或者埠下,是不同源的。或者平時我們也能遇到需要調用不同的伺服器數據資源。顯然,同源策略保障了部分安全的同時,給開發造成了很多的麻煩。
所以,跨域問題是每個前端繞不過去的坎兒。
解決辦法有兩個方向,一個是前端解決,一個是服務端介面解除限制。
前端解決就是通過jsonp、jquery ajax、axios配置代理等。還有個簡單的,比如Mac用戶,可以使用Charles工具設置代理,臨時使用。
服務端解決可以通過nginx反向代理設置允許跨域請求的域名、或者設置Access-Control-Allow-Origin,允許跨域資源共享等。
具體解決方案可參考 https://segmentfault.com/a/1190000011145364
反觀iOS,輪廓簡直不要太清晰,大部分時候只用專注於開發,沒有各種亂七八糟的事情。
㈡ 繞過前端,直接請求創建介面,也可以發帖,需要做前後端雙重驗證
有些用戶直接沒有登入,用postman等其它發送請求,雖然前端那個已經要身份注冊和登入,但是
還是可以通過介面明銷測試工神碧具發送請求。
解決辦法
後端:
後端可以給每個用戶綁定token,用戶登入的時候,會有一個token,這樣就不會繞過前端,直接繞過前端,直接請求創建介面,也可以發帖,需要做前後端雙重驗證
根據jwt(jsonwebtoken)
JWT
JSON Web Token(JWT)是一個非常輕巧的規范。這個規范允許我們使用JWT在用戶和伺服器之間傳遞安全可靠的信息。
一個JWT實際上就是一個字游槐舉符串,它由三部分組成,頭部、載荷與簽名。
㈢ 如何保證請求積壓情況下前端到後端的順序
1、修改consumer的問題,確保其恢復消費速明賀度。
2、含槐衡將現有consumer都停掉。
3、恢談做復原來的部署架構,重新用原先的consumer來消費消息。
㈣ 前端跨域解決方案有哪些
處理跨域方法一——JSONP
1.JSONP原理
利用script元素的這個開放策略,網頁可以得到從其他來源動態產生的 JSON 數據。JSONP請求一定需要對方的伺服器做支持才可以。
2.JSONP和AJAX對比
JSONP和AJAX相同,都是客戶端向伺服器端發送請求,從伺服器端獲取數據的方式。但AJAX屬於同源策略,JSONP屬於非同源策略(跨域請求)
3.JSONP優缺點
JSONP優點是兼容性好,可用於解決主流瀏覽器的跨域數據訪問的問題。缺點是僅支持get方法具有局限性。
4.JSONP的流程(以第三方API地址為例,不必考慮後台程序)
聲明一個回調函數,其函數名(如fn)當作參數值,要傳遞給跨域請求數據的伺服器,函數形參為要獲取目標數據(伺服器返回的data)。
創建一個
伺服器接收到請求後,需要進行特殊的處理:把傳遞進來的函數名和它需要給你的數據拼接成一個字元串,例如:傳遞進去的函數名是fn,它准備好的數據是fn([{「name」:「jianshu」}])。
最後伺服器把准備的數據通過HTTP協議返回給客戶端,客戶端再調用執行之前聲明的回調函數(fn),對返回的數據進行操作。
處理跨域方法二——CORS
1.CORS原理
整個CORS通信過程,都是瀏覽器自動完成,不需要用戶參與。對於開發者來說,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣。瀏覽器一旦發現AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感覺。因此,實現CORS通信的關鍵是伺服器。只要伺服器實現了CORS介面,就可以跨源通信。
2.CORS優缺點
CORS要求瀏覽器(>IE10)和伺服器的同時支持,是跨域的根本解決方法,由瀏覽器自動完成。
優點在於功能更加強大支持各種HTTP Method,缺點是兼容性不如JSONP。
處理跨域方法三——WebSocket
Websocket是HTML5的一個持久化的協議,它實現了瀏覽器與伺服器的全雙工通信,同時也是跨域的一種解決方案。WebSocket和HTTP都是應用層協議,都基於 TCP 協議。但是 WebSocket 是一種雙向通信協議,在建立連接之後,WebSocket 的 server 與 client 都能主動向對方發送或接收數據。同時,WebSocket 在建立連接時需要藉助 HTTP 協議,連接建立好了之後 client 與 server 之間的雙向通信就與 HTTP 無關了。
原生WebSocket API使用起來不太方便,我們使用Socket.io,它很好地封裝了webSocket介面,提供了更簡單、靈活的介面,也對不支持webSocket的瀏覽器提供了向下兼容。
處理跨域方法四——postMessage
如果兩個網頁不同源,就無法拿到對方的DOM。典型的例子是iframe窗口和window.open方法打開的窗口,它們與父窗口無法通信。HTML5為了解決這個問題,引入了一個全新的API:跨文檔通信 API(Cross-document messaging)。這個API為window對象新增了一個window.postMessage方法,允許跨窗口通信,不論這兩個窗口是否同源。postMessage方法的第一個參數是具體的信息內容,第二個參數是接收消息的窗口的源(origin),即"協議 + 域名 + 埠"。也可以設為*,表示不限制域名,向所有窗口發送。
㈤ 項目做好了,怎麼讓瀏覽器按F12看不到ajax請求的介面信息,感覺顯示出來很不安全!
按f12打開控制台
看上面第一排有Elements、Network、Sources等等8項,Network那個下面的選項當前頁面的所有請求,ajax的請求也在裡面
點擊下面的出現的ajax請求的路徑,右邊彈出來一個窗口:Headers,Perview,Response等等,ajax返回的數據應該是在Response下
首先點擊「console」(控制台)然後將所有記錄清空,方便查看