1.什么是URL

URL的全称是Uniform Resoure Locator,统一资源定位器。URL是浏览器寻找信息时所需的资源位置。当一个人将浏览器指向一个URL,浏览器就会在幕后发送适当的协议报文来获取人们所期望的资源。说到URL就不得不说下URI与URN这总是伴随出现的概念。

URI的全称是Uniform Resource Identifier,统一资源标识符。

URN的全称是uniform resource name,统一资源命名。

显然,URI是一个更加抽象的概念,定义了资源的唯一性标识,而URL与URN是他的两种实现。前者根据具体位置定位资源,后者根据名称定位资源。而HTTP协议处理的基本上都是URL。

URL的出现整合了互联网资源的获取方式,使得资源的获取方式都变得明朗起来。

2.URL语法

URL语法可以归纳到下面的通用格式上:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
  • scheme:方案名,常见的是http/https/ftp/mail等协议。方案名是大小写无关的,即http://www.baidu.com与HTTP://www.baidu.com是等价的。
  • user:用户名,在http协议中比较少见,默认值是匿名用户"anonymous"
  • password:密码,与上面的user性质相同。在ftp协议中是比较常见的,比如ftp://user:password@ftphost/download。如果不指定密码,不同的浏览器实现会发送不同的默认密码。
  • host:主机,资源的具体承载机器。一般使用域名或者IP来表示,使用IP的可以直接定位到具体机器,而使用域名的需要经过DNS解析后获得IP。
  • port:端口,机器上的具体应用。在一台机器上一个端口对应一个应用,有了host+port就定位到资源的具体应用上了。http协议的默认端口是80,https的默认端口是443。
  • path:路径,资源的分级目录。类似于文件系统的路径,可以使用多个/进行层级分割,每层都可以跟参数。
  • params:路径对应的参数,不常用但合法。比如:http://www.baidu.com/china;type=a/beijing;degree=b
  • query:查询字符串,与后端程序交互的关键,以?开始。比如:http://www.baidu.com?item=a&color=b
  • frag:片段,也叫锚点。前面部分可以定位到具体某个资源文件,片段用来标识具体哪一个部分。而片段是不会发送给服务器的,服务器返回整个对象,浏览器根据片段来展示不同效果。

3.URL字符集

  • URL是可移植的,所以为保障安全传输,要选用较小的、通用的字符集。
  • URL要有可读性,所以不可见,不可打印的字符也不能使用在URL中。
  • URL要有完整性,能包含各种复杂的含义,所以通过转义机制将不安全的字符编码转移为安全的字符编码。

介于上述原因,URL的设计者采用了US-ASCII编码,同时引入了转移序列的概念。具体的转译方法就是,将不安全的字符使用一个百分号%,后面跟着两个表示字符ASCII码的十六位进制数。比如空格对应ASCII码为32,所以转义后为%20。

而对于中文字符,则进行这样不同的处理。由于2个十六位进制数是一个字节的长度,所以就是将不安全字符对应的二进制按照字节划分,每个字节前跟了一个%。比如“你好”的十六进制数是e4bda0e5a5bd,经UrlEncode后就是%e4%bd%a0%e5%a5%bd。

HTTP协议之URL的更多相关文章

  1. http协议与url简介(转)

    一 知识简介 HTTP:(Hypertext transfer protocol)超文本传输协议,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议. URL ...

  2. 以双斜杠//开头的URL – 依赖协议的URL

    原文:以双斜杠//开头的URL – 依赖协议的URL 不知道大家有没有见过下面这种 url 写法: <img src="//domain.com/img/logo.png"& ...

  3. Html-双斜杠//开头的URL(依赖协议的URL)

    今天看京东HTTPS,发现链接都是这种 <a href="//chaoshi.jd.com">京东超市</a> URL是以双斜杠"//" ...

  4. HTTP协议之url详解

    HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接.URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息 URL,全称是U ...

  5. Django知识点归纳总结之HTTP协议与URL

    Django复习知识点归纳总结 1.HTTP协议 ​ 超文本传输协议(Hyper Text Transfer Protocol),是用于万维网服务器与本地浏览器之间的传输超文本的传送协议. ​ HTT ...

  6. HTTP协议之-URL

    一.URL url统一资源定位符 1.URL格式: 方案.就是指所使用的协议,类似http:// 服务器的地址,类似i.cnblogs.com/ 制定web服务器的某个资源路径 方案://服务器位置/ ...

  7. Http中URI协议 和URL协议的区别和联系

    虽然说URL和URI是整个网络协议栈很常用的东西.可是,假如你去面试求职者其中的差别,估计十个人有八个人答复不上来. 想要熟悉基础知识的朋友最好还是看一下我这个文章. “A Uniform Resou ...

  8. 解析http协议的url

    package util; import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamRea ...

  9. js获取url协议、url, 端口号等信息路由信息

    以路径为 http://www.baidu.com  为例 console.log("location:"+window.location.href); >> &quo ...

随机推荐

  1. Go Global 之怎样在全球Azure上使用Azure Free Account

    随着中国用户出海的越来越多,同学们自学Azure Global 功能的积极性也越来越高.怎样开启Azure Global 账号,有哪些Global Azure的功能可以免费使用,能不能用国内的信用卡和 ...

  2. windows 上rsync客户端使用方法

    1.1 获取 windows上实现rsync的软件(cwRsync) cwRsync是Windows 客户端GUI的一个包含Rsync的包装.您可以使用cwRsync快速远程文件备份和同步. 1.1. ...

  3. Python-week2,第二周(基于Python3.0以上)

    1,列表 存储数据我们可以使用变量,但是当有很多个数据的时候用变量就会出现很多的局限性,所以这时候就用到了列表.列表就是中括号里每个元素使用逗号隔开.列如     [1,2,3]     这就是一个列 ...

  4. hive中UDF、UDAF和UDTF使用

    Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. 一.背景:Hive是基于Hadoop中的MapReduce,提供HQ ...

  5. 使用java生成mapbox-gl可读的vector tile

    概述 mapbox-gl主要数据源来自mapbox vector tile,本文就是要阐述怎样把postgresql中的地理空间数据转换成vector tile,流程图如下: 配置 该工程采用spri ...

  6. C#内部关于绑定事件Event的线程安全

    private EventHandler _FieldsChanged;public event EventHandler FieldsChanged{    add    {        Even ...

  7. Android Weekly Notes Issue #283

    November 12th, 2017 Android Weekly Issue #283 本期内容包括Gradle相关的几篇,如封装繁杂依赖的技巧,通过kotlin dsl让gradle支持kotl ...

  8. Python之re正则模块二

    13.编译的标志 可以用re.I.re.M等参数,也可以直接在表达式中添加"?(iLmsux)"标志 *s:单行,“.”匹配包括换行符在内的所有字符 *i:忽略大小写 *L:让&q ...

  9. setTimeout和setInterval实现滚动轮播中,清除定时器的思考

    PS:希望各路大神能够指点 setTimeout(function,time):单位时间内执行一次函数function,以后不执行:对应清除定时器方法为clearTimeout; setInterva ...

  10. react 体验 react与vue的比较

    用了 vue 大半年了,不过我在2016年暑假的时候就看到了 react 这个项目,有点想学习一番,之前学习的都是基础语法和一些基础用法吧,总的来说 mvvm 框架确实都很相似,会一个就可以了; 今天 ...