URL最后结尾反斜杠(/)加与不加区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了URL最后结尾反斜杠(/)加与不加区别相关的知识,希望对你有一定的参考价值。
参考技术A最近在使用nginx搭建网站或前后端分离部署项目时遇到了一个疑惑,就是在浏览器中请求url时,最后一个反斜杠作用到底是什么?
参阅了网上的文章,记录一下
有没有反斜杠的意义在于该url是指向一个文件还是一个目录, 说明url地址是精准表达指向的,有无\'/\'代表的是两个不同的地址 。
例如:
对于服务器来说,如果访问的是目录,则会根据规则访问改目录下的默认文件(index.html、index.htm之类) 如nginx中index指令 。如访问/fxg/服务器会寻找/fxg/index.html文件 (nginx里location中root/alias指令对应目录) ,而访问/fxg服务器则会寻找/fxg文件。
对于用户来说,在大多数情况下这两个网址没有任何区别,他们访问的都是网站 fxg 目录下的默认首页。一般用户也都知道最后一个斜杠是可有可无的,他们输入网址的时候一般都只会输入 http://kayosite.com/fxg 。
当 Web 服务器接收到某个末尾不含斜杠的 url 请求时,例如 http://kayosite.com/fxg ,这时服务器会搜索网站根目录下有没有名为 fxg 的文件,如果没有就把 fxg 当做目录处理, 此时服务器会执行301永久重定向处理将/fxg重定向到/fxg/目录 ,然后返回 fxg 目录下的默认首页。
注意:在nginx中如果使用非80端口重定向时会出现301丢失端口问题,这个后面文档单独解释
当我们访问一个网址时,例如 www.xxx.com ,此时浏览器会自动帮我们添加上后面的反斜杠(/) 注意:有些浏览器会自动隐藏/,例如:chrome 。
这是因为,访问请求必须从"/"开始,即使是裸url,浏览器此时替我们做了正确的修正,在url后面自动的加上了"/"从而能正确访问。
所有主流浏览器在请求裸域URL(即首页)时都会对HTTP请求 “加斜杠” 。为了使HTTP请求有效,这实际上是必需的,其原因如下:
请注意 / 第一行中的(斜杠)-这是所请求的URL。这里什么都没有是无效的。从 RFC 2616 开始:
你可以查看浏览器向服务器发出的HTTP请求。显示在“浏览器状态栏”中的URL,甚至地址栏中的URL可能因浏览器不同而不同。谷歌Chrome并 不会 追加在状态栏最后的斜线,虽然斜线是存在的。
如果指定 http://example.com (无斜杠),此时不会发生301重定向,因为浏览器会在发出HTTP请求之前先对其进行了 修正 。
请注意,这与URL中存在路径/目录时 (http://xxx.com/yyy) 在URL末尾添加斜杠不同。如果您请求 http://example.com/directory (不使用斜杠),此时浏览器不会自动添加一个斜杠,大多数服务器如果找不到该文件则将301重定向到 http://example.com/directory/ (斜杠)目录进行加载。
@RequestParam加与不加的区别
最简单的两种写法,加或不加@RequestParam注解 @RequestMapping("/list") public String test(int userId) { return "list"; } @RequestMapping("/list") public String test(@RequestParam int userId) { return "list"; } 第一种写法参数为非必传,第二种写法参数为必传。参数名为userId。 第二种写法可以通过@RequestParam(required = false)设置为非必传。因为required值默认是true,所以默认必传。 第二种写法可以通过@RequestParam("userId")或者@RequestParam(value = "userId")指定参数名。 第二种写法可以通过@RequestParam(defaultValue = "0")指定参数默认值 用法如下: @RequestMapping("/list") public String test(@RequestParam(value = "userId", defaultValue = "0", required = false) int userId) { return "list"; }
以上是关于URL最后结尾反斜杠(/)加与不加区别的主要内容,如果未能解决你的问题,请参考以下文章
nginx配置proxy_pass URL末尾加与不加/(斜线)的区别