如果在请求正文中发送POST数据,为什么要使用URL编码?
POST请求需要设置contentType来描述在请求正文中发送的数据,并且常常使用url编码。
GET请求没有,因为没有正文。请求参数位于URL中。
以下是代码的外观(工作正常)。
/******************************************************************************/
// AJAX
$P.ajax = function (config_ajax) {
var xhr;
// get
if (config_ajax.type === 'get') {
xhr = new win.XMLHttpRequest();
xhr.open('GET', config_ajax.url, true);
xhr.onload = function () {
if (this.status === 200) {
config_ajax.callback(xhr.responseText);
}
};
xhr.send(null);
}
// post
if (config_ajax.type === 'post') {
xhr = new win.XMLHttpRequest();
xhr.open("POST", config_ajax.url, true);
xhr.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
xhr.onload = function () {
if (this.status === 200) {
config_ajax.callback(xhr.responseText);
}
};
xhr.send(config_ajax.data);
}
在这里你可以看到GET的发送数据为空,并且填充了POST的发送数据,并且POST数据是url encoded()而GET数据不是。
url encoding不是默认值,就像你没有指定它或其他一些编码一样,会抛出错误。
我想,我问的是,为什么我不能将其关闭(POST的contentType)并进行数据传输?
或者,如果按规范要求,则需要Content-type。有什么我可以比URL编码更好地使用。
如上所述,由于数据不在URL中且不需要URL编码,我更愿意使用更简单的东西。
我的猜测是,这是不可能的,这只是一个默认值,在Ajax之前使用过,也许当POST请求确实使用了URL时?
答案 0 :(得分:0)
如果在请求正文中发送POST数据,为什么要使用URL编码?
您必须使用某种编码。
来自浏览器的大多数POST请求都是提交表单数据。
GET请求中发送的表单数据使用URL编码。
使用相同的编码意味着您可以使用相同的序列化程序和解析器。
我想,我问的是,为什么我不能将其关闭(POST的contentType)并进行数据传输?
因为您要发送一些数据而不告诉收件人应该如何解码。
或者,如果按规范要求,则需要Content-type。有什么我可以比URL编码更好地使用。
您可以使用您喜欢的任何编码。 URL编码很方便,适用于大多数数据。
我更喜欢使用更简单的东西
网址编码非常简单,由于encodeURIComponent
,JavaScript可以轻松生成。