文章目录

  • 前言
  • Why WHATWG API?
  • 使用

前言

你可能已经了解到官方废弃(不鼓励使用)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句没有进行输出.


WHATWG API——url.parse()的替代方案相关推荐

  1. url.parse() 的替换方法new URL(),URl.parse()的使用。

    URl.parse()的解析使用 对于这种表单提交的的请求路径,由于其中具有用户动态填写的内容 所以不能通过完整的URL路径来处理这个请求 对于我们来讲,只需要判定,请求路径是/--?之前就行 var ...

  2. 三、案例:留言板 url.parse()

    1. url.parse()的使用 2. 留言板案例 index.html: <!DOCTYPE html> <!-- saved from url=(0027)http://192 ...

  3. node.js中的url.parse方法

    学习node.js中的url.parse方法 文章目录 前言 一.URL模块之parse方法详解 1.参数 2.实例 例子1:url.parse只传一个参数的情况 例子2:url.parse第二个参数 ...

  4. node中的 url.parse()方法

    方法说明: 使用 url.parse()方法将路径解析为一个方便操作的对象. 第二个参数为 true 表示直接将查询字符串转为一个对象(通过query属性来访问),默认第二个参数为false. 当第二 ...

  5. 自定义hive url parse函数

    在用hive做nginx日志url 分析的时候,经常需要parse url. hive中自带的函数parse_url可以实现这个功能,不过它对格式的要求比较严格,不能直接用于nginx log的req ...

  6. Google Map API使用详解(七)——加载Google Map API URL的详细解读

    谷歌地图的API类库是通过script标签导入的,形式如下: <script src="http://ditu.google.com/maps?file=api&hl=zh-C ...

  7. php获取外部URL,使用PHP从外部API / URL获取信息

    1)不要使用 file_get_contents()(如果可以帮助的话) 这是因为您需要enable fopen_wrappers才能使file_get_contents()能够处理外部源.有时这是关 ...

  8. python API url 级联生成

    参考了一下公司 python 达人 rpc 接口级联 api 调用 rpc.api.users.list() rpc.api.login(username='',password='') rpc['a ...

  9. 关于SAP Commerce Cloud OCC API url里不包含user信息的问题

    问题 CMS OCC WS Endpoint don't add User information in URI so all CMS Restriction based on user or use ...

最新文章

  1. python必学的模块_Python常用的模块
  2. 一般将来时语法课教案_英语语法:一般现在时和现在进行时
  3. 论文阅读:Network In Network
  4. asp.net core json返回的时间格式出现T 如何解决
  5. 想咸鱼翻身不粘锅?加油
  6. Chrome 对于 glyphicon 字体图标不显示的解决办法
  7. linux 安装 交换分区大小,给已安装的Linux新增Swap交换分区
  8. xpath NOT IE
  9. mysql 忘记密码处理方式
  10. 金融风控小白入门必学:审批策略分析岗面试常见问题
  11. 虹软java接摄像头_java基于虹软sdk实现人脸识别(demo)
  12. 帆软报表(finereport)常用函数
  13. 前后端分离之后,如何保护你的API
  14. Java与数据结构——树(一)
  15. lubuntu输入法设置_Ubuntu 设置中文输入法
  16. 第一章 行列式(知识点部分)
  17. DVB数字电视系统简介(DVB-C,DVB-S,DVB-T)
  18. android 8 奕骆,【innos奕骆D6000评测】又一待机神器诞生 innos 奕骆D6000评测(全文)_innos 奕骆D6000_手机评测-中关村在线...
  19. QR Code二维码
  20. 入职避坑指南(杭州)

热门文章

  1. 互联网为什么需要“黑客”?
  2. 收藏!Java 500 道核心面试题全解析
  3. ​​​​​​​微信、Facebook牵手合作,抗击全球新冠肺炎疫情
  4. 现代的 “Hello, World”,可不仅仅是几行代码而已
  5. 国产 14nm 迎曙光,进口荷兰光刻机顺利入厂!
  6. 2020年,程序员要做好苦日子的准备了!
  7. 如何一站式打造 AIoT 人才?
  8. 做好以下四点,拒做 “ 空心 ” 程序员 | CSDN 博文精选
  9. 探寻京东云核心竞争力的源泉
  10. 华为鸿蒙开源!敢为全球第一全场景分布式 OS,可替换 Android!