为啥 cookie 路径区分大小写?

Posted

技术标签:

【中文标题】为啥 cookie 路径区分大小写?【英文标题】:Why are cookie paths case sensitive?为什么 cookie 路径区分大小写? 【发布时间】:2010-09-28 20:05:16 【问题描述】:

几周前我第一次意识到,在设置 http cookie 时,虽然域名不区分大小写,但路径是。

所以暂时存储了一个cookie

http://SomeWebSite.com

可以使用

http://somewebsite.com

存储的 cookie

http://somewebsite.com/SomePath

无法使用

读取

http://somewebsite.com/somepath

根本找不到。

正如 RFC 中明确说明的那样(参见第 3.3.3 点 here)我怀疑这是一个疏忽,但作为用户,我没有受过将 url 视为区分大小写的文本和 Web 服务器的培训,就我可以说,似乎都不介意任何一种方式,并且会很好地提供页面;所以我想知道 - 这个决定背后的理由是什么?

任何人都可以解释一下吗?

【问题讨论】:

【参考方案1】:

大多数 Web 服务器都提供了防白痴机制。我知道的两个常见的方法是在目录名称的末尾添加斜杠(http://example.com/x => http://example.com/x/)以及更正或忽略大小写:(http://***.com/ABOUThttp://***.com/about 相同)。但是,这不是 Web 服务器的要求,浏览器知道这一点。 http://***.com/ABOUT 可以提供与 http://***.com/about 完全不同的页面。使用 ?x=y 语法的 GET 变量很流行,并且这些值有时对服务器脚本区分大小写。这些可能的差异必须由浏览器正确处理(不要将它们缓存为同一个文档,使用不同的 cookie 域,不要对 javascript 进行修改等)

【讨论】:

所以,从网站开发的角度来看,你不会说尝试设置 cookie 毫无意义吗,比如 - 用于自定义或身份验证 - 在路径上,因为几乎不能保证它们会是找到... @Dahan,不确定您在问什么,但我认为您可能希望将 Web 服务器配置为发送 300 HTTP 代码以将用户重定向到具有正确大小写的页面,所以它是持续的。这样,如果用户输入错误的 URL(或其他内容),他们的 cookie 仍然有效。 @strager 你的意思是http://abc.com 可以提供与http://abc.com/ 不同的页面吗? @Pacerier,实际上,没有;这是我帖子中的错误信息。但是,您可以提供来自 http://example.com/xhttp://example.com/x/ 的不同页面。 @strager 那么将http://abc.com重定向到http://abc.com/是正确的方法,还是应该将http://abc.com/重定向到http://abc.com【参考方案2】:

始终将所有内容都区分大小写。

【讨论】:

嗯,这不是我能真正控制的,这正是问题所在。 Web 服务器如何处理 url(在我见过的所有情况下都不区分大小写)和浏览器如何处理 cookie 路径都与我无关 您至少可以假设每个用户在访问网站时使用相同的大小写吗?在大多数情况下,这可能是正确的,因为大多数用户在第二次访问网站时会利用书签或自动建议。 这不是问题的答案【参考方案3】:

路径是否区分大小写取决于网络服务器。传统上类似 unix 的操作系统:s 区分大小写,而 MS 则不区分大小写,这可能反映在在指定操作系统上开发的网络服务器中。

可能感兴趣的information about different filesystems 链接。

更新

URL 指向什么资源取决于网络服务器。 http://some.domain.name/myFavouriteThings.txt 可能是存储在我的服务器硬盘上的文本文件,但它也可以存储在数据库中,指向执行并返回一些随机行的脚本。它甚至不必是文本文件,它可以是图片、视频或其他任何可以以数字方式传输的文件。

但在这种情况下,它作为文件存储在服务器上。由于服务器是类 Unix 系统,服务器文件系统区分大小写。因此,只有当请求的情况与存储在磁盘上的文件匹配时,它才会找到该文件。如果服务器存储在文件系统不区分大小写的 MS 服务器上,则请求的大小写可能无关紧要。

【讨论】:

谢谢@some,但我有点困惑 - 你指的是 f/s 路径还是 url 路径? (您提到路径是否区分大小写取决于网络服务器,但您发布的链接指的是 f/s 路径,我不会假设它们遵循相同的规则?! 由于网络服务器通常使用文件系统来检索文件,它通常取决于网络服务器运行的操作系统。

以上是关于为啥 cookie 路径区分大小写?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 mysql 区分大小写

oracle为啥区分大小写?

为啥 Get-ItemProperty 不区分大小写但 Set-ItemProperty 区分大小写?

SQL Server:为啥不区分大小写的列上的 SELECT 比区分大小写的列更快?

如何使 yarp 匹配路径不区分大小写?

Ember 路由路径区分大小写