什么是HTTP GET请求字符串的正确的编码?(What's the correct enc

2019-07-21 22:39发布

请问HTTP标准或定义的东西,他们在URL编码为%XXS之前其编码应在特殊字符可以用吗? 如果没有定义,有没有办法确定使用哪种编码? 看来,大多数浏览器以UTF-8发送数据。

Answer 1:

请问HTTP标准或定义的东西,他们在URL编码为%XXS之前其编码应在特殊字符可以用吗?

HTTP标准,没有。 但另一种标准,IRI,可以发挥作用。

URI是明确地(一次%-decoded)的字节序列。 什么Unicode字符那些字节映射到不是由URI标准或用于HTTP的HTTP标准中规定:-scheme的URI。

具体查询参数:网络浏览器将使用原始页面的编码,使表单提交GET URL,所以如果你有在ISO 8859的网页,你把“E”在一个搜索框,你会得到“ ?搜索=%E9' ,但如果你做同样的编码为UTF-8,你会得到一个页面‘?搜索=%C3%E9’。 如果你不与任何特定的字符集为你的表单页面,浏览器会猜,你不希望,因为它会导致无法猜测什么格式提交要来为。

对于URL的其他部分,浏览器不会产生他们自己,但是如果你在链接非ASCII字符提供它,它通常会对其进行编码为UTF-8。 这是不可靠的,因为它依赖于浏览器和区域设置,所以最好不要在目前使用。

,妥善允许链接非ASCII字符的标准是IRI 。 IRI转换成URI由UTF-8 - % -编码大多数的URL,但主机名是使用转换的Punycode代替。 出于兼容性最好不要依赖浏览器理解中的链接的IRI呢。 取而代之的是,UTF-8,然后 - % - 编码的路径和参数字符自己。 他们仍然会出现在现代浏览器的地址栏右边的字符; 不幸的是IE浏览器将不会在所有情况下显示解码的字符IRI形式,这取决于语言设置。

维基IRI为希腊伽玛特点是:

http://en.wikipedia.org/wiki/Γ

编码成一个URI,它是:

http://en.wikipedia.org/wiki/%CE%93


Answer 2:

据我所知,没有办法定义它,但我一直认为,这是ASCII,因为这是DNS是什么(目前,虽然局部DNS快到了,与所有的需要的问题)。

注:UTF8是“ASCII兼容”,除非你试图使用扩展字符。 这可能起着背后为什么有些浏览器可能会发送GET的数据utf-8编码的推理有些小部分。

编辑:从您的评论,好像你不知道%的编码是如何工作的根本,所以这里去。

鉴于以下字符串查询字符串, "?foo=Hello World!" ,这个 “Hello World!” 部分需要URL编码。 这种工作方式是任何“特殊”字符让他们采取的ASCII值,并转换为十六进制以前缀'%' 。 所以上面的字符串将转换为"?foo=Hello%20World%21"



Answer 3:

每RFC 2616 ,

   CHAR           = <any US-ASCII character (octets 0 - 127)> 

 token          = 1*<any CHAR except CTLs or separators> 
   separators     = "(" | ")" | "<" | ">" | "@"
                  | "," | ";" | ":" | "\" | <">
                  | "/" | "[" | "]" | "?" | "="
                  | "{" | "}" | SP | HT

和URI是token与各种具体分离秒。 因此,从理论上讲,无非是US-ASCII应该在那里。 (在实践中,由于ISO-8859-1扩展US-ASCII在HTTP规范许多其他景点时,它的不寻常找到支持ISO-8859-1,而不仅仅是US-ASCII HTTP实现,但严格说这是不符合标准的HTTP)。



文章来源: What's the correct encoding of HTTP get request strings?
标签: http encoding