前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >请求地址最后面的 “/” 加和不加到底有什么区别?

请求地址最后面的 “/” 加和不加到底有什么区别?

作者头像
江南一点雨
发布于 2019-08-06 02:38:03
发布于 2019-08-06 02:38:03
1.3K0
举报
文章被收录于专栏:玩转JavaEE玩转JavaEE

URL 是我们每天畅游在互联网世界中最最常见的东西了,对于普通用户来说,URL 就是一个字符串,比如 http://www.justdojava.com ,但是对于我们开发者而言,除了 URL,还有一个东西叫做 URI,很多人经常搞不清楚这两个概念,本文我们就从这个话题开始。

从 URN 开始

在介绍这两个东西之前,我们还得先说说另外一个东西,叫做URN,URN的全程为Uniform Resource 译作统一资源名称,URN、URL与URI的关系类似于下图:

由上图可以看到,URN 和 URL 实际上是 URI 范畴之内的概念。URN 表示给每一个互联网资源取一个名字,但是互联网资源千千万万,给每一个资源取一个不重复的名字显然不太现实,因此,并不是所有的互联网资源都有 URN ,URN 就类似于一个人的身份证号码,是唯一的,但是通过这个身份证号码找不到这个人,要找到这个人我们得通过类似于下面这种地址 “中国/广东省/广州市/天河区/马场路/南国花园/8栋/1203室” ,这种能够查找到某一个资源的字符串就是 URL ,URL 全称叫做 Uniform Resource Locator ,译作统一资源定位符,表示一个资源的地点。

URL 与 URI

URI 是 Uniform Resource Identifier 的缩写,译作统一资源标识符,RFC2396 中对这三个单词做了如下定义:

Uniform

规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。另外,加入新增的协议方案(如 http: 或 ftp:)也更容易。

Resource

资源的定义是“可标识的任何东西”。除了文档文件、图像或服务(例如当天的天气预报)等能够区别于其他类型的,全都可作为资源。另外,资源不仅可以是单一的,也可以是多数的集合体。

Identifier

表示可标识的对象。也称为标识符。

由此可见,URI 就是由某个协议方案表示的资源的定位标识符,而协议方案就是访问资源时所采用的协议类型的名称,比如我们采用 HTTP 协议时,协议方案就是 HTTP ,我们采用 FTP 协议时,协议方案就是 FTP ,另外还有 file、mailto、telnet 等。

按照 RFC3986 的说法,一个 URI 可以被进一步归类为一个定位器(URL),一个名字(URN),或两者都是。也就是说 URI 可以是 URL ,也可以是 URN 或两者兼备,如果你关心资源的名称,那就将 URI 定义成 URN 的形式,如果你关心资源的位置,那么就将 URI 定义成 URL 的形式,URI 中包括了 URN 和 URL 。在 RFC3986 文档中还有如下一句话:

"Future specifications and related documentation should use the general term "URI" rather than the more restrictive terms "URL" and "URN""

这句话告诉我们未来应该使用更加通用的 URI 术语,而不是受限制颇多的 URL 和 URN 。

前面介绍了 URI ,接下来我们再来探讨下 URI 的格式(基于前文得出的结论,下面涉及到的地址我将都以 URI 来称呼)。

URI 的格式

对于普通用户,说 URI 他们可能有点懵,但是说 http 开头的那个字符串肯定都知道是什么了,我们常见的网址除了 http: 开头之外,也有 ftp: 开头的,也有 mailto: 开头的,分别代表不同的含义,这是因为浏览器的功能不仅仅局限于访问 web 服务器,也可以用来访问 ftp 服务器,也可以用来浏览本地文件,也可以用来发送邮件,因此浏览器需要有一个东西来判断使用哪种功能来访问相应的数据,因此有了协议,也有了各种各样不同的 URI 。如下图是一个完整的URI:

这其中用户名、密码和端口号都可以省略,在浏览器拿到这样一个 URI 之后,首先会对其进行解析,比如上面这个地址,浏览器经过解析之后,知道要去获取 www.baidu.com 服务器上的 /folder/index.html 文件。不过,在实际应用中,有的时候 URI 并不是这么清晰,比如下面这个:

http://wwww.baidu.com

这种 URI 并没有直接指定要访问哪个文件,像这种没有路径的情况,就代表访问根目录下预先设置的默认文件,一般就是 /index.html,/default.html 一类的文件,在 Java 中,我们也可以在 web.xml 中来配置这个默认文件。

有的时候我们还有可能遇到下面这种地址:

http://www.baidu.com/folder/

这个 URI 以一个 / 结尾,表示 folder 是一个目录,我们要访问的是这个目录下的文件,但是又没有说明是这个目录下的哪个文件,此时依然是采用该目录下 index.html 或者 default.html 一类的文件。

有的时候,我们还可以看到下面这种 URI:

http://www.baidu.com/folder

即 folder 后面没有 /,此时会先将 folder 当作一个资源去访问(比如一个名为 folder 的 Servlet ),如果没有名为 folder 的资源,那么浏览器会自动在 folder 后面加上一个 / ,此时地址变为 http://www.baidu.com/folder/ ,folder 是一个目录,然后就会去尝试访问 folder 目录下的 index.html 或者 default.html。

注意这种自动调整只在浏览器中存在,如果你的项目是一个手机 App 或者你是一个 Ajax 请求,则不会有这种调整,即没写 / 就当做具体资源来对待,如果该资源不存在,就会报 404 ,写了/ 就当目录来对待。(OkHtpp3中是这样)

有的时候我们还可能见到下面这种URI:

http://www.baidu.com/

这个和我们介绍的第一种情况很类似,只是后面多了一个 / ,这个 / 表示我们要访问的是根目录,但是没有指定根目录下的文件,默认就是根目录下的 index.html 或者 default.html 。

OK,经过上面的介绍,小伙伴对 URI 最后面的 / 已经有了清晰的认识了吧?这个东西不可以随意省略,有 / 和没有 / ,访问结果有可能是天壤之别。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江南一点雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
爬虫基础知识点
学习爬虫之前需要了解的基础知识,如HTTP、爬虫、代理的基本原理等内容,对爬虫没有任何了解的小伙伴建议好好看看我分享的内容。
stormwen
2019/08/05
4360
网络探索之浏览器解析URL
浏览器是一个具备很多功能的计算机,不仅仅是访问网络浏览信息,使用具体哪个功能是通过url的开头进行区分的,这部分也叫做协议。
小柔
2022/10/09
3880
网络探索之浏览器解析URL
1·HTTP 概述
本文是《HTTP 权威指南》的第一章节 HTTP 概述的 读书笔记,我会尝试站在 HTTP 设计者 的角度上将知识点编辑成串,所以阅读本文您将收获 HTTP 宏观层面上的架构设计。
幺鹿
2018/08/21
5770
1·HTTP 概述
一次完整的HTTP请求过程
a)首先会搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存)
WindSun
2019/09/09
8.9K0
一次完整的HTTP请求过程
深入理解HTTP协议
TCP/IP 协议族按层次分别分为以下 4 层:应用层、传输层、网络层和数据链路层;
鱼找水需要时间
2023/12/30
5700
深入理解HTTP协议
URL地址解析
理解: 统一资源标识符,URL 和 URN 是 URI 的子集。一般泛指 URL。
HelloWorldZ
2024/03/20
5160
抛开事实不谈,URL和URI啥关系?
最近在写代码的时候突然在按下一个回车键后陷入了沉思:URL和URI到底是什么关系?
闫同学
2024/08/07
2352
Python 爬虫 NO.1 URI和URL
URL 是 URI 的子集,也就是说每个 URL 都是 URI,但不是每个 URI 都是 URL。URI 还有一个子集就是 URN。
Rattenking
2022/08/26
2660
URL语法,编码以及未来的可能性
URL 提供了一种定位因特网上任意资源的手段,但这些资源是可以通过各种不同的方案(比如 HTTP、FTP、SMTP)来访问的,因此 URL 语法会随方案的不同而有所不同。大部分 URL 都遵循通用的 URL 语法,而且不同 URL 方案的风格和语法都有不少重叠。大多数 URL 方案的 URL 语法都建立在这个由 9 部分构成的通用格式上:
zy010101
2022/10/05
5760
URI、URL、URN、IRI,你分得清吗?
This document describes the syntax and semantics for a compact string representation for a resource available via the Internet(注意,URL 是互联网中的一个可用资源的字符串表示,注意是互联网中。). These strings are called "Uniform Resource Locators" (URLs).
WEBJ2EE
2021/10/14
1.4K0
URI、URL、URN、IRI,你分得清吗?
了解HTTP的基本历史及知识
上世纪九十年代前,互联网还没有被发明出来,那时候的网络基本以发邮件(Email1965年发明)等形式简单实用
CRMEB商城源码
2022/04/29
4890
了解HTTP的基本历史及知识
Http请求报文格式和响应报文格式
客户端连上服务器后,向服务器发出获取某个Web资源的消息,称之为客户端向服务器发送了一个HTTP请求。
chenchenchen
2022/03/09
8.4K0
Http请求报文格式和响应报文格式
网络通信之生成HTTP消息
而互联网上的每个文件都有「唯一」的一个的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
前端柒八九
2022/08/25
5060
网络通信之生成HTTP消息
HTTP 简明基础知识
HTTP超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。它是一个客户端和服务器端请求和应答的标准(TCP)。 客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求,服务器端响应报文的过程。本文简要描述http以及web网站的一些基础知识供大家参考。 一、什么是http http,超文本传输协议(HyperText
Leshami
2018/08/13
3830
HTTP 简明基础知识
一文助你分清encodeURI与encodeURIComponent
帮助你区别 encodeURI 与 encodeURIComponent 的使用场景
薛定喵君
2021/08/23
2.5K0
HTTP基础知识
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。
mcxfate
2020/08/02
6290
前端工程师,揭开HTTP的神秘面纱
TCP/IP协议将应用层、表示层、会话层合并为应用层,物理层和数据链路层合并为网络接口层
FinGet
2019/06/28
4810
前端工程师,揭开HTTP的神秘面纱
跟我一起探索HTTP-什么是资源和 URI
HTTP 请求的内容通称为"资源"。”资源“这一概念非常宽泛,它可以是一份文档,一张图片,或所有其他你能够想到的格式。每个资源都由一个 (URI) 来进行标识。
用户1418987
2023/10/16
2600
跟我一起探索HTTP-什么是资源和 URI
HTTP协议简介
本文主要介绍了HTTP协议的相关知识,包括HTTP协议的定义、请求方法、状态码、响应头、响应体、长连接、无状态、版本历史、RFC文档地址和HTTP应用范围等。此外,还介绍了在PHP中如何实现HTTP协议相关的操作,包括短连接、长连接、cookie、session、RESTful API等。通过了解和掌握这些知识,可以更好地进行网络编程和开发工作。
企鹅号小编
2017/12/28
6840
HTTP协议简介
HTTP:伟大而又无闻的协议
  Hello,大家好啊,我是Connor,一个从无到有的技术小白。有的人一说什么是HTTP协议就犯愁,写东西的时候也没想过什么是HTTP协议,只是知道HTTP协议是用来网页传输的,但是再深究一点就不明白了,所以今天我们来讲一讲什么是HTTP协议。
润森
2019/10/15
5230
HTTP:伟大而又无闻的协议
相关推荐
爬虫基础知识点
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档