真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Web應(yīng)用開(kāi)發(fā)中怎么接收請(qǐng)求地址

這篇文章主要介紹“Web應(yīng)用開(kāi)發(fā)中怎么接收請(qǐng)求地址”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Web應(yīng)用開(kāi)發(fā)中怎么接收請(qǐng)求地址”文章能幫助大家解決問(wèn)題。

創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、都安網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為都安等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

Web 應(yīng)用開(kāi)發(fā)中,經(jīng)常會(huì)有需要獲取請(qǐng)求的ServerName, 請(qǐng)求端口等, 以此構(gòu)造絕對(duì)URL,拿到用戶請(qǐng)求地址,然后進(jìn)行跳轉(zhuǎn),重定向等操作。

也許你說(shuō)這還不簡(jiǎn)單,回字的四種寫(xiě)法,我有多種方法拿到這個(gè)請(qǐng)求地址。

       req.getServerName();

       req.getRemoteHost();

       req.getHeader("host");

       req.getRequestURI();

       req.getRequestURL().toString();

我們一般要通過(guò)請(qǐng)求來(lái)封裝一個(gè)絕對(duì)地址,用上面這幾個(gè)方法差不多就可以了,對(duì)于http/https 的區(qū)別,可以通過(guò)getSchema 來(lái)獲取。

那這里拿到的地址一定是實(shí)際用戶輸入的URL嗎?

答案是不確定的。

如果你是使用的一個(gè)獨(dú)立的Web Container,比如靜態(tài)資源和 Servlet 都用 Tomcat 來(lái)處理,這種 standalone 模式下的,獲取到的 ServerName,是 request直接處理的,直接請(qǐng)求傳遞來(lái)的,端口則是 Connector 在監(jiān)聽(tīng)的端口號(hào)。這個(gè)時(shí)候這些請(qǐng)求方法都能拿到我們想要的內(nèi)容。

但是如果我們把 Tomcat 放到一個(gè) proxy Server 后面,此時(shí),所有的用戶請(qǐng)求都先從代理服務(wù)器過(guò)來(lái),此時(shí)再在 Java Web 應(yīng)用內(nèi)調(diào)用上述的方法時(shí),你的請(qǐng)求serverName,端口號(hào)等實(shí)質(zhì)上想要獲取真實(shí)的用戶請(qǐng)求來(lái)的地址,以及端口,而不是 Connector 監(jiān)聽(tīng)的這個(gè)。而且根據(jù) proxy server 配置的不同,你拿到不一定是預(yù)期的結(jié)果。

為啥呢?

從代理服務(wù)器上傳遞過(guò)去的請(qǐng)求,以 Nginx 為例,默認(rèn)的 proxy header 中,對(duì)于 Host,使用的是 $proxy_host,此時(shí)我們拿到的并不是實(shí)際在 Http 的請(qǐng)求頭中傳過(guò)去的 Host域,而是我們?cè)谂渲?proxy_pass 指令時(shí)設(shè)置的host,而用戶實(shí)際一般都是通過(guò)域名請(qǐng)求來(lái)的,這時(shí)兩個(gè)就會(huì)出現(xiàn)不一致的現(xiàn)象。

比如 proxy_pass 配置的是 http://localhost:port這種形式,這個(gè)時(shí)候在

request.getServerName這些方法時(shí),返回的就是localhost,后面getHeader拿host, 也不會(huì)有正確的結(jié)果。

為了能在這種非 Standalone的模式下,能拿到代理服務(wù)器傳遞后依然正確的請(qǐng)求地址,就需要進(jìn)行一些配置。 比如 Apache 中的 ProxyParseHost  on, 以及 Nginx 中的 proxy_set_header Host $http_host。

這樣,實(shí)際傳遞到 Java Web 容器的時(shí)候就是實(shí)際用戶請(qǐng)求頭中的Host,再據(jù)此拼裝絕對(duì)URL就能符合我們預(yù)期。

除了設(shè)置代理服務(wù)器的設(shè)置外, 我們?cè)?Tomcat 這里也可以進(jìn)行一些配置。 

在 Connector 組件中,有這樣兩個(gè)屬性: 

ProxyName

ProxyPort

在文檔中,解釋如下:

如果 Connector 使用在一個(gè)代理場(chǎng)景中,

配置這個(gè)屬性用于指定調(diào)用 request.getServerName() 方法時(shí)返回的 ServerName 和調(diào)用request.getServerPort() 方法返回的 ServerPort。

這樣,即使 代理服務(wù)器傳來(lái)的值會(huì)變,但是我們?cè)贑onnector 中根據(jù)具體的約定配置好了值,在獲取時(shí)就能以此來(lái)拼裝絕對(duì)的URL。

而在一些其他編程語(yǔ)言中,有些是會(huì)將ServerName 和 Host 區(qū)分開(kāi),比如PHP中的,兩個(gè)分別拿到不同的信息。

$_SERVER['SERVER_NAME']

$_SERVER['HTTP_HOST']

所以,在構(gòu)造一個(gè)絕對(duì)URL時(shí),也是需要區(qū)分部署環(huán)境,場(chǎng)景等。

關(guān)于“Web應(yīng)用開(kāi)發(fā)中怎么接收請(qǐng)求地址”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。


本文標(biāo)題:Web應(yīng)用開(kāi)發(fā)中怎么接收請(qǐng)求地址
文章網(wǎng)址:http://weahome.cn/article/ggodpi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部