105

@将符号用作用户的一部分是否安全?例如,可能的 URL 是http://example.com/@dave.

这个想法是,现在用户通常被称为“@user”,那么为什么不将用户页面设为“@username”呢?

4

4 回答 4

132

百分比编码……</h2>

如果将其百分比编码为.,则可以@在 HTTP URI 路径中使用该字符。%40

许多浏览器仍会将其显示为@,但例如,当您将 URI 复制并粘贴到文本文档中时,它将是%40.

…但也直接

您可以@直接在 HTTP URI 路径中使用,而不是对其进行百分比编码。

请参阅URI路径的语法。除了各种不相关的子句之外,路径可能由 、 或 set 中的segment字符segment-nz组成segment-nz-ncsegment并由集合segment-nz 中的字符组成,pchar定义为:

pchar = unreserved / pct-encoded / sub-delims / ":" / "@"

如您所见,@已明确列出。

该集合还明确segment-nz-nc列出了该字符:@

segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )

所以,像这样的 HTTP URI 是完全有效的:

http://example.com/@dave

例子

这是一个示例维基百科页面:

  • 关联
  • 复制和粘贴:http://en.wikipedia.org/wiki/%22@%22_%28album%29

如您所见,"()字符是百分比编码的,但@_是直接使用的。

于 2013-11-02T01:12:16.320 回答
45

您可以在 URL 中使用@符号吗?-是的,你可以!

请注意,@-character,十六进制值 40,十进制值 64,是 URI 的保留字符。它的用途是用于 URI 中的电子邮件地址之类的东西mailto:,例如mailto:username@somewhere.foo,用于在 URI 上传递用户名和密码信息(这是一个坏主意,但可能):http://username:password@somewhere.foo

如果您想要一个在路径中有 @-symbol 的 URL,您需要对其进行编码,即所谓的“ URL-encoding ”。例如像这样:http://somewhere.foo/profile/username%40somewhere.foo

所有现代浏览器都会将其显示为http://somewhere.foo/profile/username@somewhere.foo,并将 @-sign 中的任何类型转换为%40,因此易于使用。

许多网络框架也将帮助您自动或使用辅助函数来转换为 URL 编码的 URL。

因此,总而言之:是的,您可以在 URL 中使用@-symbol,但您必须确保它已编码,因为您不能使用@-character

于 2013-10-22T07:18:01.503 回答
14

RFC中包含以下字符:

* ' ( ) ; : @ & = + $ , / ? % # [ ]

被保留并且:

保留字符的目的是提供一组可与 URI 中的其他数据区分开来的定界字符。

所以不建议使用这些不编码的字符。

于 2013-10-22T04:41:31.683 回答
0

基本上没有。

@是一个保留字符,只能用于其预期目的。

请参阅: http: //perishablepress.com/stop-using-unsafe-characters-in-urls/http://www.ietf.org/rfc/rfc3986.txt

它可以用于编码,但我认为这不是你要问的。

显然现代浏览器会处理这个问题。但是,您询问这是否安全,并且根据RFC的规范,您不应该使用它(未编码),除非它用于其预期目的。

于 2013-10-22T04:37:17.440 回答