Javascript 将数据从HTTPS页面发送到本地主机服务器

Javascript 将数据从HTTPS页面发送到本地主机服务器,javascript,c#,http,ssl,https,Javascript,C#,Http,Ssl,Https,我想知道从浏览器中加载的HTTPS网页向运行在localhost上的服务器发送数据的最佳方式是什么。目前,我有一个可以同时使用HTTP和HTTPS页面的解决方案,但是对于HTTPS页面,浏览器将输出一个混合内容警告(这是应该的)。这可以通过更改浏览器设置来绕过,但我不希望用户这样做。这是我的javascript,通过书签加载到浏览器中(不确定这是否是最好的方式,但与浏览器无关): 下面是C#服务器代码中的一些重要片段: public WebAppHandler() {

我想知道从浏览器中加载的HTTPS网页向运行在localhost上的服务器发送数据的最佳方式是什么。目前,我有一个可以同时使用HTTP和HTTPS页面的解决方案,但是对于HTTPS页面,浏览器将输出一个
混合内容
警告(这是应该的)。这可以通过更改浏览器设置来绕过,但我不希望用户这样做。这是我的javascript,通过书签加载到浏览器中(不确定这是否是最好的方式,但与浏览器无关):

下面是C#服务器代码中的一些重要片段:

    public WebAppHandler()
    {
        // Other non-important stuff
        listener = new HttpListener();
        listener.Prefixes.Add("http://localhost:13337/");
    }

    public void pollForSongChanges()
    {
        try
        {
            listener.Start();
        }
        catch (HttpListenerException)
        {
            return;
        }
        while (listener.IsListening)
        {
            var context = listener.GetContext();
            ProcessRequest(context);
        }
        listener.Close();
    }

    public void start()
    {
        pr = new Thread(new ThreadStart(pollForSongChanges));
        pr.Start();
    }
我在stackoverflow上看到的另一个问题有一个很好的答案(公认的答案),它要求您将SSL证书绑定到应用程序,但这是否意味着我必须为本地主机服务器获取一个实际的受信任SSL证书,以便在其他计算机上开箱即用

也许我完全错了,只是想知道是否有更好的方法。谢谢你的回答

@阿列克谢列文科夫,你的意思是这样的:

    function postToIframe(data) {
        var url = "http://localhost:13337/";
        var target = "npiframe";

        $('body').append('<form action="' + url + '" method="post" target="' + target + '" id="postToIframe"></form>');
        $.each(data, function (n, v) {
            $('#postToIframe').append('<input type="hidden" name="' + n + '" value="' + v + '" />');
        });
        $('#postToIframe').submit().remove();
    }
函数postToIframe(数据){
变量url=”http://localhost:13337/";
var target=“npiframe”;
$('body')。追加('');
$。每个(数据、函数(n、v){
$('#postToIframe')。追加('');
});
$(“#postToIframe”).submit().remove();
}

基本上,你不能这样做。因为这是黑客行为

但是,如果您可以修改客户端的主机文件,则将localhost路由到“yourdomain.com”,并生成ssl证书到“yourdomain.com”


或者您可以在localhost server中创建代理服务器(to)。

由于主机名localhost不是您自己所有,因此无法获取localhost的证书。但是,如果您拥有example.com,您可以获得foo.example.com的证书,并且解析哪个IP foo.example.com也无关紧要。 因此,Spotify和其他公司使用的一种常见解决方法是为自己的主机名拥有一个证书,但DNS条目指向127.0.0.1

但大多数人不知道,只有当用户不使用web代理时,这种方法才有效。使用代理时,名称将仅在代理处解析,因此它实际上意味着它试图从代理的视图(即代理本身)连接到本地主机


总之:使用localhost中的资源将无法完全工作。从安全角度来看,您的web应用程序无法控制localhost上实际运行的内容,因此通过将localhost中的任何内容包含到页面中来信任它是一个坏主意。这与将用户系统中的
文件://
包含到应用程序中是一样的。

旁注:我假设您知道常规表单帖子没有相同的源策略,并且有一些使用ajax的原因。仍然可能需要编辑,以澄清在您的情况下什么将/不起作用。
    function postToIframe(data) {
        var url = "http://localhost:13337/";
        var target = "npiframe";

        $('body').append('<form action="' + url + '" method="post" target="' + target + '" id="postToIframe"></form>');
        $.each(data, function (n, v) {
            $('#postToIframe').append('<input type="hidden" name="' + n + '" value="' + v + '" />');
        });
        $('#postToIframe').submit().remove();
    }