服務(wù)端的解決方案的基本原理就是,由客戶端將請求發(fā)給本域服務(wù)器,再由本域服務(wù)器的代理來請求數(shù)據(jù)并將響應(yīng)返回給客戶端。
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供祿豐企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、html5、小程序制作等業(yè)務(wù)。10年已為祿豐眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進行中。
最常用的服務(wù)器解決方案就是利用web服務(wù)器本身提供的proxy功能,如apache和lighttpd的mod_proxy模塊。在百度內(nèi)
部,transmit的分流功能也可以解決部分跨域問題。但這些方法都有一定的局限性,鑒于安全性等問題的考慮,space這邊最后開發(fā)了一個專門用于處
理跨域請求代理服務(wù)的spproxy模塊,用于徹底解決js跨域問題。
協(xié)議+域名+端口號都相同才是同域
在 HTML 中,a, form, img, script, iframe, link 等標(biāo)簽以及 Ajax 都可以指向一個資源地址,而所謂的跨域請求就是指:當(dāng)前發(fā)起請求的域與該請求指向的資源所在的域不一樣。
如果對跨域請求不做限制,會有安全隱患
跨源資源共享 Cross-Origin Resource Sharing(CORS) 是一個新的 W3C 標(biāo)準(zhǔn),它新增的一組HTTP首部字段,允許服務(wù)端其聲明哪些源站有權(quán)限訪問哪些資源。換言之,它允許瀏覽器向聲明了 CORS 的跨域服務(wù)器,發(fā)出 XMLHttpReuest 請求,從而克服 Ajax 只能同源使用的限制。
在使用go語言寫測試服務(wù)的時候遇到了前端跨域請求問題,只需在go中加入
http跨域:
很多朋友可能知道Go語言的優(yōu)勢在哪,卻不知道Go語言適合用于哪些地方。
1、 Go語言作為服務(wù)器編程語言,很適合處理日志、數(shù)據(jù)打包、虛擬機處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫代理等;網(wǎng)絡(luò)編程方面。Go語言廣泛應(yīng)用于Web應(yīng)用、API應(yīng)用、下載應(yīng)用等;除此之外,Go語言還可用于內(nèi)存數(shù)據(jù)庫和云平臺領(lǐng)域,目前國外很多云平臺都是采用Go開發(fā)。
2、 其實Go語言主要用作服務(wù)器端開發(fā)。其定位是用來開發(fā)"大型軟件"的,適合于很多程序員一起開發(fā)大型軟件,并且開發(fā)周期長,支持云計算的網(wǎng)絡(luò)服務(wù)。Go語言能夠讓程序員快速開發(fā),并且在軟件不斷的增長過程中,它能讓程序員更容易地進行維護和修改。它融合了傳統(tǒng)編譯型語言的高效性和腳本語言的易用性和富于表達性。
3、 Go語言成功案例。Nsq:Nsq是由Go語言開發(fā)的高性能、高可用消息隊列系統(tǒng),性能非常高,每天能處理數(shù)十億條的消息;
4、 Docker:基于lxc的一個虛擬打包工具,能夠?qū)崿F(xiàn)PAAS平臺的組建。
5、 Packer:用來生成不同平臺的鏡像文件,例如VM、vbox、AWS等,作者是vagrant的作者
6、 Skynet:分布式調(diào)度框架。
7、 Doozer:分布式同步工具,類似ZooKeeper。
8、 Heka:mazila開源的日志處理系統(tǒng)。
9、 Cbfs:couchbase開源的分布式文件系統(tǒng)。
10、 Tsuru:開源的PAAS平臺,和SAE實現(xiàn)的功能一模一樣。
11、 Groupcache:memcahe作者寫的用于Google下載系統(tǒng)的緩存系統(tǒng)。
12、 God:類似redis的緩存系統(tǒng),但是支持分布式和擴展性。
13、 Gor:網(wǎng)絡(luò)流量抓包和重放工具。
以上的就是關(guān)于go語言能做什么的內(nèi)容介紹了。
最近打算為我的網(wǎng)站添加一個服務(wù)器資源監(jiān)視功能,需要服務(wù)端主動向前端推動資源占用數(shù)據(jù)。這時Http則不能達到要求。所以自然想到采用websocket。以前使用SpringBoot時使用websocket很簡單,只需要將ServerEndpointExporter注入到bean容器并配合相應(yīng)注解即可創(chuàng)建一個websocket服務(wù)。這里要感謝各位前輩的封裝讓我們能盡快實現(xiàn)相應(yīng)的功能,但本次出于學(xué)習(xí)目并不是公司項目(效率穩(wěn)定性至上)同時使用的開發(fā)語言為Golang,其web開發(fā)生態(tài)也不會像Java那樣豐富,最后選擇了開源實現(xiàn) gorilla/websocket 項目地址
執(zhí)行 go get github.com/gorilla/websocket 添加依賴
我們知道websocket由http升級而來,首先會發(fā)送附帶Upgrade請求頭的Http請求,所以我們需要在處理Http請求時攔截請求并判斷其是否為websocket升級請求,如果是則調(diào)用 gorilla/websocket 庫相應(yīng)函數(shù)處理升級請求。
首相要創(chuàng)建Upgrader實例,該實例用于升級請求
其中 CheckOringin 是一個函數(shù),該函數(shù)用于攔截或放行跨域請求。函數(shù)返回值為 bool 類型,即 true 放行, false 攔截。如果請求不是跨域請求可以不賦值,我這里是跨域請求并且為了方便直接返回 true
此時已經(jīng)成功升級為websocket連接并獲得一個conn實例,之后的發(fā)送接收操作皆有conn完成其類型為websocket.Conn。
首先向客戶端發(fā)送消息使用 WriteMessage(messageType int, data []byte) ,參數(shù)1為消息類型,參數(shù)2消息內(nèi)容
示例:
接受客戶端消息使用 ReadMessage() 該操作會阻塞線程所以建議運行在其他協(xié)程上。該函數(shù)有三個返回值分別是,接收消息類型、接收消息內(nèi)容、發(fā)生的錯誤當(dāng)然正常執(zhí)行時錯誤為 nil。一旦連接關(guān)閉返回值類型為-1可用來終止讀操作。
示例:
同時可以為連接設(shè)置關(guān)閉連接監(jiān)聽,函數(shù)為 SetCloseHandler(h func(code int, text string) error) 函數(shù)接收一個函數(shù)為參數(shù),參數(shù)為nil時有一個默認實現(xiàn),其源碼為:
可以看到作為參數(shù)的函數(shù)的參數(shù)為int和string類型正好和前端的close(long string)對應(yīng)即前端調(diào)用close(long string)關(guān)閉連接后兩個參數(shù)會被發(fā)送給后端并最終被 func(code int, text string) error 所使用。
示例:
則斷開連接時將打印code和text
注意:要想使斷連處理生效必須要有 ReadMessage() 操作否則不會觸發(fā)斷連處理操作。
以上是常用基礎(chǔ)操作點擊 官方API手冊 學(xué)習(xí)更多。
最后:大幻夢森羅萬象狂氣斷罪眼\ (??) /
當(dāng)前名稱:go語言支持服務(wù)器端跨域,golang解決跨域
本文地址:http://chinadenli.net/article6/hdogog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、微信小程序、全網(wǎng)營銷推廣、python、服務(wù)器托管、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)