为什么POST请求经常与Content-type设置一起发送到urlencoded?

时间:2013-10-02 13:45:39

标签: javascript ajax

如果在请求正文中发送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时?

1 个答案:

答案 0 :(得分:0)

  

如果在请求正文中发送POST数据,为什么要使用URL编码?

您必须使用某种编码。

来自浏览器的大多数POST请求都是提交表单数据。

GET请求中发送的表单数据使用URL编码。

使用相同的编码意味着您可以使用相同的序列化程序和解析器。

  

我想,我问的是,为什么我不能将其关闭(POST的contentType)并进行数据传输?

因为您要发送一些数据而不告诉收件人应该如何解码。

  

或者,如果按规范要求,则需要Content-type。有什么我可以比URL编码更好地使用。

您可以使用您喜欢的任何编码。 URL编码很方便,适用于大多数数据。

  

我更喜欢使用更简单的东西

网址编码非常简单,由于encodeURIComponent,JavaScript可以轻松生成。