0

如果 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 编码 () 而 GET 数据不是。

url 编码不是默认的,如果你不指定它或其他一些编码,就会抛出错误。

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

或者,如果规范要求 Content-type 。有没有比 URL 编码更好的方法。

如上所述,因为数据不在 URL 中,也不需要 URL 编码,所以我宁愿使用更简单的东西。

我的猜测是这是不可能的,这只是一个默认值,在 Ajax 之前已经使用过,也许当 POST 请求确实使用了 URL 时?

4

1 回答 1

0

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

您必须使用某种编码。

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

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

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

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

因为你会发送一些数据,而不是告诉接收者应该如何解码。

或者,如果规范要求 Content-type 。有没有比 URL 编码更好的方法。

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

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

URL 编码非常简单,并且 JavaScript 使得生成很容易,这要归功于encodeURIComponent.

于 2013-10-02T13:49:47.447 回答