iT邦幫忙

1

ajax內網呼叫問題

  • 分享至 

  • xImage

不好意思各位大大
小弟有一個問題想請教
js是屬於client端 AJAX是由Client直接呼叫的方式
假設我目前有A主機放前台(只有view和ajax)
而B主機是做API的接收傳遞
C主機放資料庫

今天把A主機放外網 BC主機放內網
BC主機有開通道給A主機
這樣我如果從自己電腦連到A主機上
是不是Ajax就無法返回資料
因為我自己的電腦並沒有在內網開放網域的白名單中

想請問各位大大我這樣的解釋是不是正確的
有敘述不明確的部分麻煩見諒 我再補上

froce iT邦大師 1 級 ‧ 2021-04-27 18:05:19 檢舉
呃,ajax是使用者發起的,你打不到後台api當然收不到

你的架構應該要在A上面的web server(IIS nginx) 導向你的B
小魚 iT邦大師 1 級 ‧ 2021-04-27 18:20:53 檢舉
 
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2021-04-28 07:59:22
最佳解答

認真來說,你的理解沒有錯。

基本 client 是無法直接POST到B、C主機上
畢竟它並沒有對外。

正常一般來說,會利用唯一對外的主機(A)。來內網運行。

也就是說你的AJAX要先打入A主機,由A主機來去跟BC主機請求。

看更多先前的回應...收起先前的回應...
st474ddr iT邦新手 2 級 ‧ 2021-04-28 10:00:31 檢舉

感謝大大回覆
這樣的話 是不是loading都變成在A主機上
原本只是在client端

小魚 iT邦大師 1 級 ‧ 2021-04-28 12:40:47 檢舉

所以你們要做這樣的架構的主要原因是甚麼?

st474ddr iT邦新手 2 級 ‧ 2021-04-28 13:38:28 檢舉

@小魚 大大
主要是要前後端分離

正常一定是這樣的。
但你會這樣安排,不是為了安全性嘛??

st474ddr iT邦新手 2 級 ‧ 2021-04-29 13:48:32 檢舉

沒錯大大
感覺就是在performance和security做考量
主要這個專案是包給外面廠商
而外面廠商堅持要把B主機對外

他的說法

在B主機的後端就能做到防範攻擊
不需要放在內網
而且外部如果能從B主機抓到API回傳的資料
從A主機下手也可以抓到擺在內網的B主機資料

所以我很疑惑
想上來請問一下各位大大

這個很難說誰對誰錯。

基本上來說,BC都內網的。相對的就做不太到流量分離。全由A主機來承所有的流量。且也會在無形中加重了A主機的負擔。
但這也是有其好處。因為大多數來說,不會去影響到BC主機。
因為一般被攻擊的話。A主機會先掛。

不過這也得看你們的API機制寫法是如何的。也會因為API的寫法不好。
雖然是交由A主機來跟B請求的API。但也有可能會因為這樣而讓B主機掛掉。

不過目前看你的規劃分佈。理論上來說,如果是我的話,我也會將B主機對外。
因為你B安排的是API的串接。認真來說,它才是主要承擔的角色。
如果將其對內而由A來請求。反而會失去B主機的角色特性。

且正統的前後端分離,認真來說,前端要處理的事並不多。主要只是HTML的應用處理。我推測你的廠商的規劃。
是將A拿來當主要的WEB SERVER但無後端角色。
B才是主要的後端角色。

所以A只單純的負責前端的事。B才是處理後端的事。

這樣的話,我也會認為AB都要對外開放才行。

st474ddr iT邦新手 2 級 ‧ 2021-04-29 17:40:16 檢舉

且正統的前後端分離,認真來說,前端要處理的事並不多。主要只是HTML的應用處理。我推測你的廠商的規劃。
是將A拿來當主要的WEB SERVER但無後端角色。
B才是主要的後端角色

確實是這樣沒錯
感謝大大的解惑

我只是想說 能擺在內網不是比擺在外網更好 更安全?
只不過被廠商說那是傳統的想法XDD

0
小魚
iT邦大師 1 級 ‧ 2021-04-27 18:21:07

看起來應該是可以?
但是這牽扯到網路怎麼設定,
然後要用內網IP去連,
但是如果防火牆跟防護沒做好,
就算這樣的架構人家還是可以攻進來...

看更多先前的回應...收起先前的回應...
froce iT邦大師 1 級 ‧ 2021-04-27 19:26:02 檢舉

不行啦,他這明顯是前後端分離。
A主機放前端,那你要怎麼打ajax連那個連不到的B主機?
最簡單就reverse proxy導到B而已。

st474ddr iT邦新手 2 級 ‧ 2021-04-27 22:20:21 檢舉

感謝兩位大大的回覆
@force 大大 說的沒錯
我們是用前後端分離的架構
如果是用reverse proxy
那我們call ajax的URL是不是就要call A主機上的
再透過A主機導向

st474ddr iT邦新手 2 級 ‧ 2021-04-27 22:22:01 檢舉

如果把B主機放在外網
相對而言是不是安全性就要考慮的周全
目前B主機有做身分驗證 token...之類的一些防範

小魚 iT邦大師 1 級 ‧ 2021-04-27 22:55:26 檢舉

所以不是從A主機連喔?
A主機不是網頁嗎?
A可以連到B跟C吧?

恩這架構要思考一下,
好像真的沒有這樣做過...

小魚 iT邦大師 1 級 ‧ 2021-04-27 23:03:08 檢舉

恩恩,
對..使用者端應該要能夠連到Server,
(除非A也來個Server再轉到B...)
網路怎麼防護的部分我也不是很熟,
該回去複習一下雷神大大上的課了 XD

st474ddr iT邦新手 2 級 ‧ 2021-04-27 23:19:51 檢舉

@小魚大大
依個人所知
因為ajax是client端發送
所以發送的origin為使用者的瀏覽器
而非連過去瀏覽的"A主機"
所以 由於B在內網 使用者便會抓不到資料
不知道小弟有沒有理解錯誤
還望其他大大指點

小魚 iT邦大師 1 級 ‧ 2021-04-28 07:55:04 檢舉

你說的是對的,
還真的沒有這樣做過,
忽然腦袋打結...

但是為什麼要這樣子做呢? XD

至於資訊安全的部分可能要請教其他大大.

froce iT邦大師 1 級 ‧ 2021-04-28 08:29:53 檢舉

不是啊,答案明明就給了,reverse proxy啊...
A主機除了放靜態網頁,還要設定路由 bypass 給 B。

ajax call A就好沒錯。這樣你A和B都是同一origin,有些事情會比較好做。

st474ddr iT邦新手 2 級 ‧ 2021-04-28 09:57:13 檢舉

感謝 @force 大大
我懂您意思
所以我是在前端的router設定reverse proxy給B
然後ajax就是call那個route

我要發表回答

立即登入回答