網站首頁 編程語言 正文
文章目錄
前言
你可能已經了解到官方廢棄(不鼓勵使用)url.parse() 方法的事了.
由于 url.parse() 方法使用一種寬松的非標準算法來解析網址字符串,因此可能會引入安全問題。 具體來說,已經確定了主機名欺騙以及用戶名和密碼處理不當的問題。
這個新的替代語法也不復雜 如果你只打算拆解URL來獲取到數據, 新的方法只比url.parse()長個一兩句, 但卻能換來更安全的環境;
Why WHATWG API?
針對url.parse()的問題, 使用了更加具有選擇性和精確度的方法選擇編碼字符以應對復雜的URL和用戶信息, 主機.
為此它們重新弄了四個編碼集來提升精確度:
編碼集 | 作用 |
---|---|
C0控制的百分比編碼集 | 用于解決特定條件下的主機和路徑; |
片段百分比編碼集 | 用于處理網址片段; |
路徑百分比編碼集 | 用于處理大多數網址路徑 |
userinfo編碼集 | 專用于處理網址編碼中的用戶信息 |
加持下, WHATWG API不僅僅是彌補了url.parse()的缺點, 在某些方面甚至強過url.parse();
使用
有兩個參數可供傳入:
參數 | 說明 |
---|---|
參數一 | 一個URL中的文件路徑(相對地址). |
參數二 | 一個標準的URL, 得是帶"http://"或"https://"的這種絕對地址, 可能要費點心思拼接. |
參數二可選, 當第一個參數為相對地址時才應當傳入參數二.
公式:
const 自定義名 = new URL([相對地址], [URL]);
console.log(自定義名.屬性之一);
console.log(自定義名.屬性之一);
例:
const { url } = req;
const { host } = req.headers;
const myURL = new URL(url, `http://${host}`);
console.log("這是req:" + req);
console.log(url);
變量外面套大括號:
不加括號相當于把req對象賦給局部變量host
加了相當于把req的對象里名字叫做header的屬性的值拿出來,assign給本地的變量host
在進行URL解析后, 依舊可以通過以前的方法來從解析結果里拿到想要的數據,
只不過有些屬性名和以前不同了…
屬性 | 說明 |
---|---|
hash | 獲取/設置"#"后的內容 |
host | 獲取/設置URL的主機部分 |
hostname | 獲取/設置URL的主機名部分 |
href | 獲取/設置傳入的整個URL |
origin | 獲取/設置協議, 服務器名和域名即URL中文件前的部分 |
username | 獲取/設置URL的用戶名部分 |
password | 獲取/設置URL的密碼部分 |
pathname | 與origin截然相反,獲取/設置文件路徑,且不會帶上亂七八糟的傳值字段 |
port | |
protocol | |
search | 獲取/設置"?"后的序列化部分 |
屬性獲取 例:
const myURL = new URL('https://baidu.com/foo/foolish?234444&dwdwdbwdwd');
console.log("href: " + myURL.href);
console.log("origin: " + myURL.origin);
console.log("host: " + myURL.host);
console.log("hostname: " + myURL.hostname);
console.log("pathname: " + myURL.pathname);
console.log("protocol: " + myURL.protocol);
console.log("search: " + myURL.search);
/* console.log("username: " + myURL.username);
console.log("password: " + myURL.password);
console.log("port: " + myURL.port);
console.log("hash: " + myURL.hash); */
結果:
因為URL里沒有某些部分的內容, 所以后面4句沒有進行輸出.
原文鏈接:https://blog.csdn.net/qq_52697994/article/details/121096520
相關推薦
- 2022-05-20 python?關鍵字與標識符超詳細整理_python
- 2022-12-10 K8S節點本地存儲被撐爆問題徹底解決方法_云其它
- 2022-07-25 Android自定義View原理(實戰)_Android
- 2022-09-05 C語言之關于二維數組在函數中的調用問題_C 語言
- 2022-04-09 C語言實現簡易計算器功能_C 語言
- 2022-03-28 用python實現九九乘法表實例_python
- 2022-07-27 使用Docker將容器打成鏡像的方法步驟_docker
- 2022-06-04 Jenkins安裝的時區問題分析解決_安裝教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支