目前正在基于网页创建应用程序启动器和更新程序。了解浏览器的局限性(安全性原因),对于我的项目,我需要一个本地应用程序来控制更新和创建操作系统进程。
在测试和研究大量时间的同时;现在我有了一个有效的本地应用程序用Go 编写,可以创建一个进程并从ajax
POST
请求中删除它。我准备了一些代码来展示我当前的尝试是什么样的(没什么特别的):
<!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>
$(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);
});
}
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://
网站并将https
和http
连接混合在一起,导致浏览器安全限制出现blocked mixed content
错误,这是可以理解的。
也许有其他方法可以实现这种沟通? (要明确的是,WebSockets
也需要安全连接。)