【Try to Hack】URL

举报
开心星人 发表于 2022/06/29 15:31:21 2022/06/29
【摘要】 📒博客主页:开心星人的博客主页🔥系列专栏:Try to Hack🎉欢迎关注🔎点赞👍收藏⭐️留言📝📆首发时间:🌴2022年6月11日🌴🍭作者水平很有限,如果发现错误,还望告知,感谢!@toc URL格式URL(Uniform Resource Locator, 统一资源定位器),也就是我们经常提的链接,通过URL请求可以查找到唯一的资源,格式如下:protocol :// ...

📒博客主页:开心星人的博客主页
🔥系列专栏:Try to Hack
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年6月11日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!

@toc

URL格式

URL(Uniform Resource Locator, 统一资源定位器),也就是我们经常提的链接,通过URL请求可以查找到唯一的资源,格式如下:

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

举个例子
http://www.foo.com/path/f.php?id=1&type=cool#new

对应关系为:
protocol <=> http
hostname <=> www.foo.com
path <=> /path/f.php
query <=> id=1&type=cool
fragment <=> new

hostname注意点

hostname既可以是域名也可以是主机名

域名访问和ip访问的区别:
1、ip访问对应某一台确定的服务器;域名访问相当于在ip访问的基础上,做了一个反向代理的中间功能。例如:百度,很多人会同时使用,如果使用的是同一台服务器的话,服务器估计会扛不住,如果访问的是域名,中间的反向代理,可以将用户反向代理到不同的服务器上,减轻服务器压力。
2、扫描ip范围更广一点,一般都是网站访问目录的上一级,一般管理员备份的时候会把备份文件放到ip地址所指向的根目录。(这一点可以利用)

fragment

fragment(信息片断)(锚点)
信息片断,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

是资源本身的某一部分的一个锚点。锚点代表资源内的一种“书签”,它给予浏览器显示位于该“加书签”点的内容的指示。 例如,在HTML文档上,浏览器将滚动到定义锚点的那个点上;在视频或音频文档上,浏览器将转到锚点代表的那个时间。值得注意的是 # 号后面的部分,也称为片段标识符,永远不会与请求一起发送到服务器。

需要HTTP Basic认证的URL请求

对于需要HTTP Basic认证的URL请求,甚至可以将用户名与密码直接放入URL中,在hostname之前
例如
http://username:password@www.foo.com/

URL编码方式

摘自 阮一峰:关于URL编码

URL有个重点就是编码方式,有三类:escape、encodeURI、encodeURIComponent,对应的解码函数是:unescape、decodeURI、decodeURIComponent。这三个编码函数是有差异的,甚至浏览器在自动URL编码中也存在差异。

一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*’(),"[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。

不同的操作系统、不同的浏览器、不同的网页字符集,将导致完全不同的编码结果。那如何能够保证客户端只用一种编码方法向服务器发出请求?

就是使用Javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会。因为Javascript的输出总是一致的,所以就保证了服务器得到的数据是格式统一的。

Javascript函数:escape()

这个函数现在已经不提倡使用了,但是由于历史原因,很多地方还在使用它
escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如"春节"的返回结果是%u6625%u8282,也就是说在Unicode字符集中,"春"是第6625个(十六进制)字符,"节"是第8282个(十六进制)字符。
在这里插入图片描述

它的具体规则是,除了ASCII字母、数字、标点符号@ * _ + - . /以外,对其他所有字符进行编码。在\u0000到\u00ff之间的符号被转成%xx的形式,其余符号被转成%uxxxx的形式。

所以,“Hello World"的escape()编码就是"Hello%20World”。因为空格的Unicode值是20(十六进制)。

无论网页的原始编码是什么,一旦被Javascript编码,就都变为unicode字符。也就是说,Javascipt函数的输入和输出,默认都是Unicode字符。这一点对下面两个函数也适用。

escape()不对"+"编码。但是我们知道,网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。所以,使用的时候要小心。

Javascript函数:encodeURI()

ncodeURI()是Javascript中真正用来对URL编码的函数。

它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号; / ? : @ & = + $ , #,也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

在这里插入图片描述
需要注意的是,它不对单引号'编码。

Javascript函数:encodeURIComponent()

与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。

因此,; / ? : @ & = + $ , #,这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。

阮一峰:关于URL编码

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。