亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Web應用開發中怎么接收請求地址

發布時間:2022-01-14 10:53:12 來源:億速云 閱讀:130 作者:iii 欄目:大數據

這篇文章主要介紹“Web應用開發中怎么接收請求地址”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Web應用開發中怎么接收請求地址”文章能幫助大家解決問題。

Web 應用開發中,經常會有需要獲取請求的ServerName, 請求端口等, 以此構造絕對URL,拿到用戶請求地址,然后進行跳轉,重定向等操作。

也許你說這還不簡單,回字的四種寫法,我有多種方法拿到這個請求地址。

       req.getServerName();

       req.getRemoteHost();

       req.getHeader("host");

       req.getRequestURI();

       req.getRequestURL().toString();

我們一般要通過請求來封裝一個絕對地址,用上面這幾個方法差不多就可以了,對于http/https 的區別,可以通過getSchema 來獲取。

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

答案是不確定的。

如果你是使用的一個獨立的Web Container,比如靜態資源和 Servlet 都用 Tomcat 來處理,這種 standalone 模式下的,獲取到的 ServerName,是 request直接處理的,直接請求傳遞來的,端口則是 Connector 在監聽的端口號。這個時候這些請求方法都能拿到我們想要的內容。

但是如果我們把 Tomcat 放到一個 proxy Server 后面,此時,所有的用戶請求都先從代理服務器過來,此時再在 Java Web 應用內調用上述的方法時,你的請求serverName,端口號等實質上想要獲取真實的用戶請求來的地址,以及端口,而不是 Connector 監聽的這個。而且根據 proxy server 配置的不同,你拿到不一定是預期的結果。

為啥呢?

從代理服務器上傳遞過去的請求,以 Nginx 為例,默認的 proxy header 中,對于 Host,使用的是 $proxy_host,此時我們拿到的并不是實際在 Http 的請求頭中傳過去的 Host域,而是我們在配置 proxy_pass 指令時設置的host,而用戶實際一般都是通過域名請求來的,這時兩個就會出現不一致的現象。

比如 proxy_pass 配置的是 http://localhost:port這種形式,這個時候在

request.getServerName這些方法時,返回的就是localhost,后面getHeader拿host, 也不會有正確的結果。

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

這樣,實際傳遞到 Java Web 容器的時候就是實際用戶請求頭中的Host,再據此拼裝絕對URL就能符合我們預期。

除了設置代理服務器的設置外, 我們在 Tomcat 這里也可以進行一些配置。 

在 Connector 組件中,有這樣兩個屬性: 

ProxyName

ProxyPort

在文檔中,解釋如下:

如果 Connector 使用在一個代理場景中,

配置這個屬性用于指定調用 request.getServerName() 方法時返回的 ServerName 和調用request.getServerPort() 方法返回的 ServerPort。

這樣,即使 代理服務器傳來的值會變,但是我們在Connector 中根據具體的約定配置好了值,在獲取時就能以此來拼裝絕對的URL。

而在一些其他編程語言中,有些是會將ServerName 和 Host 區分開,比如PHP中的,兩個分別拿到不同的信息。

$_SERVER['SERVER_NAME']

$_SERVER['HTTP_HOST']

所以,在構造一個絕對URL時,也是需要區分部署環境,場景等。

關于“Web應用開發中怎么接收請求地址”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福建省| 灌南县| 彰化市| 武隆县| 梁平县| 蓬安县| 大冶市| 藁城市| 新兴县| 永新县| 鸡泽县| 寿光市| 繁昌县| 佛冈县| 麦盖提县| 安庆市| 和政县| 临猗县| 防城港市| 玛纳斯县| 杨浦区| 阿城市| 漳州市| 彭山县| 民权县| 蕲春县| 金坛市| 鄂伦春自治旗| 恩平市| 石门县| 辽阳县| 浑源县| 防城港市| 阳山县| 扎鲁特旗| 河北省| 仲巴县| 亳州市| 宜兰县| 宾阳县| 吴堡县|