多了个尾巴

有时候,当你尝试在地址栏输入https://123/demo的时候,会发现浏览器会重定向到https://123/demo/这个地址,也就是多了个/,发生了重定向。有图为证:

上面这个图是在地址栏输入imgss.github.io/demo的截图,根据这张图,可以分析,从开始请求到页面显示的过程是这样的:

  1. 当在浏览器中输入上面的地址时,服务器首先返回一个状态码为301的响应,同时响应头里有一个location,值是Location:http://imgss.github.io/demo/告诉浏览器去请求这个地址,如下图:

  2. 于是浏览器不甘心,再次向浏览器发起请求http://imgss.github.io/demo/,注意这次是http,服务器却返回状态码307,告诉浏览器去还要再跑一趟:请求Location:https://imgss.github.io/demo/`这个地址才能拿到资源

  3. 浏览器第三次请求https这个地址,才得到数据并加载显示页面。

'/'的作用

这里不谈http=>https这一步的定向,就说说有尾巴和没尾巴的区别。

他们的区别就在于两者所表示的当前页面的路径不同。前者的当前路径是根路径,后者是demo子路径。

举个例子:假如当前页面的html中有一个超链接,地址用相对路径href="./statictodo/index.html"表示,


如果页面的当前地址是https://imgss.github.io/demo
那么./所代表的是根路径,
当点击超链接时,浏览器会请求https://imgss.github.io/statictodo/index.html而忽略掉demo,这就可能导致服务器返回404;


如果页面的当前地址是https://imgss.github.io/demo/
那么./所代表的就是地址本身,
点击超链接时浏览器就会请求https://imgss.github.io/demo/statictodo/index.html这个路径。

对于静态资源服务器来说,请求https://imgss.github.io/demo/这样的路径能访问到页面,是因为服务器会自动在demo路径下尝试找index.html之类的文件并发给浏览器,所以html的当前路径一定是demo下的,也是因为这样,浏览器才会通过重定向自动加上/,防止相对路径解析出错,保证浏览器能正确的请求到资源。

url最后的“/”是什么作用的更多相关文章

  1. URL中“#” “?” &“”号的作用

    URL中"#" "?" &""号的作用   阅读目录 1. # 2. ? 3. & 回到顶部 1. # 10年9月,twit ...

  2. URL中#(井号)的作用(转)

    2010年9月,twitter改版. 一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为 http://twitter.com/username 改版后,就变 ...

  3. hash在URL上的用法及作用

    阅读目录 1. # 2. ? 3. & 回到顶部 1. # 10年9月,twitter改版.一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为http ...

  4. python测试开发django-4.获取url参数和name的作用

    前言 如打开博客园按时间分类标签页[https://www.cnblogs.com/yoyoketang/archive/2018/10.html],里面是时间参数是动态的,如果我想获取里面的时间参数 ...

  5. django学习-5.获取url参数和name的作用

    1.前言 假如我们要打开这两个博客园地址:[https://www.cnblogs.com/xiamen-momo/archive/2020/11.html].[https://www.cnblogs ...

  6. url加时间戳方法及作用

    速记:URL 的末尾追加了时间.这就确保了请求不会在它第一次被发送后即缓存,而是会在此方法每次被调用后重新创建和重发:此 URL 会由于时间戳的不同而稍微有些不同.这种技巧常被用于确保到脚本的 POS ...

  7. ${openid_wx} el解析式放入url的“”里才起作用。

    window.location.href="${ctx }/wx/reservation/content?shopid="+shopid+"&&openi ...

  8. maven pom文件的 name 标签 和 url标签到底是什么作用

  9. MVC的URL路由规则

    MVC的URL路由规则 Routing的作用:它首先是获取到View传过来的请求,并解析Url请求中Controller和Action以及数据,其次他将识别出来的数据传递给Controller的Act ...

随机推荐

  1. Language Oriented Programming:下一代编程样式 Part I (翻译)

    原文信息 原文地址 作者信息 Sergey Dmitriev JetBrains Sergey Dmitriev is the cofounder and CEO of JetBrains Inc., ...

  2. Sql Server用户名和登录名的关系总结

    以前经常被SQL Server中的用户名和登录名搞迷糊,因为用sa(登录名)就搞定一切东西了,当然这会存在一些安全隐患.网上的文章也貌似讲得很好,但还是不明白.今天决心把这个问题弄明白.mashall ...

  3. Linux磁盘满问题分析

    线上一台Linux服务器最近经常磁盘根分区满告警,但不是普通的日志文件或数据文件过多过大,现象如下: 1)执行“df -h”查看各分区空间的使用情况[root@XEN64 /]# df -hFiles ...

  4. Java EE JAR包的说明

    在java ee的开发中,jar文件是工程的基础,下面转载了网上兄弟一篇文章,简单介绍了一下,java ee中常用的jar文件的说明: activation.jar 与javaMail有关的jar包, ...

  5. MapGis如何实现WebGIS分布式大数据存储的

    作为解决方案厂商,MapGis是如何实现分布式大数据存储的呢? MapGIS在传统关系型空间数据库引擎MapGIS SDE的基础之上,针对地理大数据的特点,构建了MapGIS DataStore分布式 ...

  6. windows类型

    _IN_ 输入型参数  _OUT_ 输出型参数 typedef unsigned long DWORD;//double wordtypedef int BOOL;//因为cpu原因4字节的int运行 ...

  7. 异步多线程 ASP.NET 同步调用异步 使用Result产生死锁

    一个方法调用了async方法,要将这个方法本身设计为async. public class BlogController : Controller { public async Task<Act ...

  8. ElementTriArgyris

    class ElementTriArgyris(ElementH2): nodal_dofs = 6 facet_dofs = 1 dim = 2 maxdeg = 5 def gdof(self, ...

  9. Oracle包被锁定的原因分析及解决方案

    http://blog.csdn.net/jojo52013145/article/details/7470812 在数据库的开发过程中,经常碰到包.存储过程.函数无法编译或编译时会导致PL/SQL ...

  10. SignalR简介

    什么是SignalR? ASP.NET SignalR是ASP.NET开发人员的库,它简化了向应用程序添加实时Web功能的过程.实时Web功能是指服务器代码在连接的客户端可用时立即将内容推送到连接的客 ...