【Try to Hack】URL
📒博客主页:开心星人的博客主页
🔥系列专栏: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()中统统会被编码。至于具体的编码方法,两者是一样。
- 点赞
- 收藏
- 关注作者
评论(0)