前端 - 为什么说:"对参数的数据类型,GET只接受ASCII字符,而POST没有限制?"

查看:728
本文介绍了前端 - 为什么说:"对参数的数据类型,GET只接受ASCII字符,而POST没有限制?"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

1 问题描述

我在:99%的人都理解错了HTTP中GET与POST的区别中看到下面:

"对参数的数据类型,GET只接受ASCII字符,而POST没有限制"

我对这句话理解是这样的:GET的请求参数中不可以带有非ASCII码字符。

但是一般来说:无论是URL还是请求参数中的非ASCII码都会字符被URL编码成ASCII码字符吗?

那么这个区别到底是什么意思呢?是我理解错了吗?

2 我做的其他尝试:

2.2 我自己也在一个demo里尝试了下,请求如下

        axios.get('/static/jsons/goodDetail.json',{
            params:{
                goodId:this.$route.params.goodId,
                id:"μ"
            }
        })

如下图可以被正常URL编码

2.2 谷歌上搜相关内容基本上都是这篇文章,而且没有详细解释。

这个问题已被关闭,原因:问题已解决 - 问题已解决,且对他人无借鉴意义

解决方案

在 HTTP 协议中,URL 是 HTTP 的一个首部。既然作为一个首部,那么根据约定,一定是 ASCII 字符的(毕竟计算机是美帝发明的嘛),而 GET 参数取的正是 URL 中的 QUERY STRING。最初 HTTP 也和计算机一样只是应用的很少,美帝也没想到会覆盖全球,于是他们就很 naive 地使用非 ASCII 的头部 URL 来传输 GET。后来有了 UTF-8,浏览器开发公司发现,编码都是十六进制的嘛。于是开始使用 % 加编码的一个字节来组成新编码,这就是 URL code 的由来,其实本质上传输的还是 ASCII,只不过对它硬转码了。

HTTP 是直接使用 MIME 的,它是为了收发非 ASCII 邮件而存在的一种扩展。最初电子邮件也是只支持 ASCII,可是由于邮件越来越复杂,美帝才对协议进行扩展,让它能够传输小电影、小图片或者其它的文件,然后就有了 MIME,它有一个 MIME type,来说明具体是什么类型的文件。后来,其他国家的人一想:诶,卧槽,我直接用 MIME 来传输我们国家的字符不就完了么。然后 MIME 就能传非 ASCII 字符了。

我们说的 POST,它其实就是 HTTP 的实体,通过 MIME,也就可以传输非 ASCII 字符了。

这篇关于前端 - 为什么说:"对参数的数据类型,GET只接受ASCII字符,而POST没有限制?"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆