关于http请求

前段时间和同事争论为什么需要给ajax的请求参数加encode,我说因为中文会乱码。同事问:post呢?!

还真没研究过ajax的post请求,只知道用ajax的时候post也是传递的字符串,长得和get一样 name=xxx&sex=xxx这样,所以就要encodeURI吗?

先看jquery的$.ajax,查看源码 如果ajax传递的data是字符串,ajax本身并不会对其进行编码,如果是其它的就会,不分post和get,这样就可以证明post本质和get一样吗?

其实不然:

通过查看ajax在w3c的官方定义,我发现,ajax的 post请求默认是utf-8传输的!!!

而form表单的post通过chrome抓请求可以看到,自动对字段进行了encode!!

就是说 如果post请求,中文会乱码是站不住的!而且通过自己写的jsp代码测试,的确如此,post请求无论是原生form还是ajax传输,如果中文都不用收到去urlencode。


那么问题来了?为什么使用上面大家都会encode呢?大家都傻吗?

其实原因并不是因为中文会乱码 是因为特殊符号!比如& = 这种会影响后端解析key value 所以会对value里面出现的&符号编码。


-------------------------------分割线----------------------------

上面只说的是post,get请求是需要编码的,中文会乱码以及特殊符号影响后端解析两个问题都存在


结论:无论get还是post请求,都需要编码,后端都需要解码。


再补一个jQuery ajax的问题,ajax如果是get请求,在ie下面会有cache的可能,需要手动加入 cache:false来去除缓存的影响,或者在参数中传一个随机数/时间戳

post请求不会有缓存(浏览器行为)不用care


你可能感兴趣的:(js)