目录
认识URL
平时我们俗称的 "网址" 其实就是说的 URL (Uniform Resource Locator 统一资源定位符). 互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它.
之前我们在jdbc的时候就接触过URL,在设置数据源时。
我们写到:setUrl("jdbc:mysql://127.0.0.1:3306/(数据库名)?characterEncoding = utf8&useSSL = false"),这里的URL描述了,某个资源在网络上的所属位置,数据库也算一种资源
解析标准URL
我们先来看一个RFC 标准文档规定的标准的URL
协议方案名:就是这个URL是按照哪个协议写的;
登录信息(认证):这个东西现在击极少用了,尤其是针对用户的产品。(现在都是直接搞个登录界面的)
@:分隔符,不必管他
服务器地址:可以是IP也可以是域名,这里使用的是域名(因为域名更好传播,所以大部分都是用域名)
服务器端口号:通过ip地址只是描述了网络资源在哪个主机上,(一个主机可能有多个服务器程序,使用端口号来区分是主机上的哪个程序)然而URL 上的端口号是可以省略的。
对于http请求,端口号省略,默认防访问的是80端口(浏览器给的一个默认值)
对于https请求,端口号省略,默认访问的是443端口号
带层次的文件路径:描述了你要访问服务器的哪个资源(一个服务器提供的资源可能有很多)。
另外虽然这里看着像是一个目录的写法,但是实际的服务器中,不一定是以目录的形式来存储资源的。(这里的资源可能是硬盘中的资源,也可能是内存中的数据,也可能是通过网络访问其他服务器拿到的数据,还可能是cpu计算出的一些数据)
查询字符串(query string):是一种键值对结构的数据,键值对之间用&来分割,键和值之间用=分割,一个url中的字符串可能有N个,可能有很长,而且query string是程序员自定义的,不像header中的键值对是标准规定的
注意:对于query string来说,如果value(值)部分包含一些特殊字符的话就需要对特殊字符进行urlencode操作
如我们在浏览器中输入一个C++,url中显示的query string中出现的是C%2B%2B(因为在query string 中 + ? / :等都有了特殊的含义,为了防止浏览器对url的解析出错,就需要对这些特殊字符进行encode,如图++用编码16禁止进行了encode)
片段标识符:因为有的网页内部比较长,可以对其进行分段,通过片段标识符就可以完成页面内部的跳转,平常可能少见,技术文档经常会这么搞