浏览器和本地应用程序之间的通信 - 安全连接?

时间:2016-06-24 14:12:34

标签: javascript html html5 go ssl-certificate

目前正在基于网页创建应用程序启动器和更新程序。了解浏览器的局限性(安全性原因),对于我的项目,我需要一个本地应用程序来控制更新和创建操作系统进程。

在测试和研究大量时间的同时;现在我有了一个有效的本地应用程序用Go 编写,可以创建一个进程并从ajax POST 请求中删除它。我准备了一些代码来展示我当前的尝试是什么样的(没什么特别的):

的index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />

  <title>api_test</title>
  <script src="js/jquery-3.0.0.min.js"></script>
  <script src="js/script.js"></script>

</head>
<body>
  <h2 id="statusText"></h2>
</body>
</html>

JS /的script.js

$(document).ready(function(){
  console.log("Hey! ;)");
  tryConnection();
});

function tryConnection() {
  var statusReq = $.ajax({
    method: "GET",
    url: "http://127.0.0.1:9091/api/test",
    dataType: "json"
  });

  statusReq.fail(function(){
    $('#statusText').text("Fail");
    setTimeout(tryConnection, 5000);
  });

  statusReq.done(function(json){
    $('#statusText').text(json.status);
    console.log("Integer result: " + json.result);
    setTimeout(tryConnection, 10000);
  });
}

本地应用程序,app.go

package main

import (
  "log"
  "net/http"
  "encoding/json"
)

type APITest struct {
  Status string `json:"status"`
  Result int `json:"result,omitempty"`
};

func testHandler(w http.ResponseWriter, r *http.Request) {
  w.Header().Set("Access-Control-Allow-Origin", "*");

  TestValue := APITest{Status: "Works!", Result: 123};
  json.NewEncoder(w).Encode(&TestValue);
}

func main() {
  log.Println("Started!");
  http.HandleFunc("/api/test", testHandler);

  err := http.ListenAndServe("127.0.0.1:9091", nil);
  if err != nil {
    log.Fatal("Error occured:", err);
  }
}

一切似乎都很好! 但是..

我目前唯一能解决的问题是,如何在不需要携带带有证书和密钥文件的已编译二进制文件的情况下实际添加对https://连接的支持?因为我想将此功能实施到仅https://网站并将httpshttp连接混合在一起,导致浏览器安全限制出现blocked mixed content错误,这是可以理解的。

也许有其他方法可以实现这种沟通? (要明确的是,WebSockets也需要安全连接。)

0 个答案:

没有答案