Javascript 对HTTPS地址的XMLHTTP POST请求是否使用任何加密?

Javascript 对HTTPS地址的XMLHTTP POST请求是否使用任何加密?,javascript,https,xmlhttprequest,cryptojs,Javascript,Https,Xmlhttprequest,Cryptojs,如果我们使用javascript的http请求函数: var request = new XMLHttpRequest(); 对于https地址,这将使用任何类型的加密还是MITM能够看到我们发送的所有数据 例如: function createAuthToken(baseRestURL, callback) { var APIPath = "account/api/session"; var CORSPath = "https://cors-anywhere.herokuap

如果我们使用javascript的http请求函数:

var request = new XMLHttpRequest();
对于https地址,这将使用任何类型的加密还是MITM能够看到我们发送的所有数据

例如:

function createAuthToken(baseRestURL, callback) {
    var APIPath = "account/api/session";
    var CORSPath = "https://cors-anywhere.herokuapp.com/";
    var completeRestURL = CORSPath + baseRestURL + APIPath;
    console.log("REST API URL: " + completeRestURL);

    var method = "POST";
    var postData = "{\"tokenId\": \"" + document.getElementById('api_key').value + "\",\"secret\": \"" + document.getElementById('secret').value + "\",\"loginMode\": 1,\"applicationType\": 35}";
    var async = true;
    var request = new XMLHttpRequest();
    request.onreadystatechange = function() {
        if (request.readyState == 4 && (request.status == 200 || request.status == 201)) {
            console.log("ONLOAD");
            var status = request.status; // HTTP response status, e.g., 200 for "200 OK"
            console.log(status);
            var response = JSON.parse(request.responseText);
            console.log(response.session_token);       
            return callback(response.session_token);

        }

    }
    request.open(method, completRestURL, async);
    request.setRequestHeader("Content-Type", "application/json");
    request.setRequestHeader("Accept", "application/json");
    request.send(postData);
后续问题:如果没有,是否有一种方法可以在客户端javascript中包含安全的加密?我的想法是在将请求发送到服务器之前使用webisite的公钥对其进行加密,但我找不到任何其他人尝试客户端加密

粗略的例子:


我没有学习计算机科学,在网上也找不到关于这方面的任何东西。一般公认的方法是什么?

XMLHttpRequest中的HTTP和XML部分一样,只是一个遗留的命名方案。因为所使用的请求可以不仅仅包括http协议URL,并且接收的不仅仅是XML响应体

例如,最初的W3C工作草案介绍了XMLHttpRequest对象,它说:

为了与web兼容,对象的名称为XMLHttpRequest 否则就没什么意义了。它支持交通运输 除了XML以外的其他数据格式,一些实现支持 除HTTP之外的其他协议(该功能未在 但此规范)和API也支持发送数据

请注意“一些实现”,因为这是2006年的工作草案,所以不是每个人都使用相同的实现

XMLHttpRequest的当前whatwg规范对名称有如下说明:

XMLHttpRequest的名称是历史性的,与它的名称无关 功能


因此,只要所使用的浏览器根据规范实现XMLHttpRequest,请求/响应将被浏览器视为正常情况,即使用https进行加密。

XMLHttpRequest中的HTTP和XML部分一样,只是一个遗留的命名方案。因为所使用的请求可以不仅仅包括http协议URL,并且接收的不仅仅是XML响应体

例如,最初的W3C工作草案介绍了XMLHttpRequest对象,它说:

为了与web兼容,对象的名称为XMLHttpRequest 否则就没什么意义了。它支持交通运输 除了XML以外的其他数据格式,一些实现支持 除HTTP之外的其他协议(该功能未在 但此规范)和API也支持发送数据

请注意“一些实现”,因为这是2006年的工作草案,所以不是每个人都使用相同的实现

XMLHttpRequest的当前whatwg规范对名称有如下说明:

XMLHttpRequest的名称是历史性的,与它的名称无关 功能


因此,只要所使用的浏览器根据规范实现XMLHttpRequest,请求/响应将被浏览器视为正常情况,即https加密。

是的,对https资源的任何请求(现代浏览器不会拒绝)都可以端到端加密。是的,对HTTPS资源的任何请求(现代浏览器不会拒绝)你可以指望得到端到端的加密。这是否意味着,当我发出POST请求(如示例)时,建立到服务器的SSL连接的整个过程都由我的浏览器为我实现?@JesseRezaKhorasanee是的,所有这些都由你来处理,因为没有低级api来访问控制权,ie没有用于设置SSL握手、连接等的api。这是否意味着当我发出POST请求(如示例)时,建立到服务器的SSL连接的整个过程都由我的浏览器为我实现?@JesseRezaKhorasanee是的,所有这些都由你来处理,因为没有低级api来访问这一精细的控制,ie没有用于设置SSL握手、连接等的api。
var CryptoJS = require("crypto-js");
var stackOverflowKey = "30 82 01 0a 02 82 01..."
var postData = "{\"tokenId\": \"" + document.getElementById('api_key').value + "\",\"secret\": \"" + document.getElementById('secret').value + "\",\"loginMode\": 1,\"applicationType\": 35}";
var encryptedPostData = cryptoJS.hmacSHA256(postData, stackOverflowKey)

//let's skip the callback and request headers as they are the same as above

var request = new XMLHttpRequest();
request.open();
request.send(encryptedPostData);