之前在預(yù)生產(chǎn)環(huán)境遇到過(guò)這個(gè)問(wèn)題姐赡,h5頁(yè)面和API部署在不同域名下扰肌,訪問(wèn)接口返回值為亂碼厚柳。
當(dāng)時(shí)的解決辦法為放在同一域名下氧枣,但是并沒(méi)有解決根本問(wèn)題。
現(xiàn)在生產(chǎn)環(huán)境公司要求絕對(duì)不能放在同一域名下别垮,(一個(gè)小伙伴給的解釋是搶占資源便监,我覺(jué)得合理)
所以當(dāng)下問(wèn)題就來(lái)了,搞了兩天才弄明白真正原因碳想。
第一烧董,亂碼問(wèn)題
是因?yàn)閚ginx為了節(jié)省資源在返回html的時(shí)候會(huì)自動(dòng)壓縮(不知道記得對(duì)不對(duì))
在請(qǐng)求的時(shí)候加上 gzip:true 即可。
第二胧奔,nginx返回404問(wèn)題
亂碼問(wèn)題解決了以后逊移,發(fā)現(xiàn)nginx返回的結(jié)果為404。
原因是headers
是因?yàn)榇颂巶鹘oAPI的headers直接復(fù)用了頁(yè)面給nodejs的headers(req.headers為頁(yè)面給nodejs的headers)req.headers有個(gè)參數(shù)為host指向的是h5頁(yè)面的地址而不是API的地址
(猜測(cè)龙填,加上host后nginx會(huì)根據(jù)host來(lái)找調(diào)用的API地址胳泉,因?yàn)椴辉谕挥蛎拢藭r(shí)host指向的是頁(yè)面部署的域名而不是API部署的域名岩遗,自然找不到扇商,這也就解釋了為什么部署在同一域名時(shí)不會(huì)出現(xiàn)問(wèn)題。
本地運(yùn)行的時(shí)候宿礁,訪問(wèn)IP地址可以正常返回結(jié)果案铺,訪問(wèn)IP對(duì)應(yīng)的域名時(shí)404,是因?yàn)樵L問(wèn)IP時(shí)不會(huì)通過(guò)nginx窘拯,所以也不會(huì)有問(wèn)題)