【问题标题】:XMLHTTPRequest / CORS?, Server always receive "Origin: null" on headersXMLHTTPRequest / CORS?,服务器总是在标头上收到“Origin:null”
【发布时间】:2020-03-30 13:09:09
【问题描述】:

我有一个用 MCU + ESP-01 WIFI 模块完成的小服务器。在 PC 上,我创建了一个带有按钮的 HTML 文件,当按下它时,它会通过互联网向服务器主板发送一个 GET 请求。这是有效的,董事会对浏览器的响应显示在 HTML 的文本框中。 董事会的响应在其标题中包括:“HTTP/1.1 200 OK”、“Access-Control-Allow-Origin: *”、“Access- Control-Allow-Methods: GET, POST", "Access-Control-Allow-Headers: Content-Type, Origin" 和 "Content-Type: application/json”。然后在标头之后是一个小的 JSON 字符串作为数据(这个 JSON 字符串是在 HTML 的文本框中显示的内容)。

下面是我的 HTML 按钮代码:

<!DOCTYPE html>

<html>

    <head>
        <title>BUTTON OVER INTERNET</title>
        <meta charset="UTF-8"/>
    </head>

    <body>

        <input type="text" id="result_text" size="15">
        <input type="button" onclick="Send()" value="SEND-REQUEST">

        <script>

            function Send() 
            {
                document.getElementById("result_text").value = "";

                var XHR = new XMLHttpRequest();

                XHR.open("GET", "http://163.192.145.78:8383/internet_test", true);
                XHR.setRequestHeader("Origin", "http://someIP.com");
                XHR.timeout = 4000;

                XHR.onreadystatechange = function() 
                {
                    if (this.readyState == 4 && this.status == 200) 
                    {
                        document.getElementById("result_text").value = this.responseText;
                        XHR.abort();
                    }
                };

                XHR.ontimeout = function (e) 
                {
                    alert("TIMEOUT!");
                    XHR.abort();
                };

                XHR.send();
            }

        </script>

    </body>

</html>

以下是 MCU 为每个请求接收的数据包:

MCU(服务器)接收到的报头中的“Origin”字段始终为“null”值。在我使用该服务器的应用程序中,出于安全目的,我想确定请求来自何处。缺少什么?

另外,我尝试在 XHR.open 之后添加到 XMLHTTPRequest,如下所示: XHR.setRequestHeader("Origin", "http://www.someIP.com"); 但是 Origin 这样做也是空的......

目前,应用程序将使用本地文件中的这个 HTML 按钮(例如,我可以通过 WhatsApp 将 HTML 发送给另一个人),而不是在服务器中。在这种情况下,是否可以将 Origin 附加到它?

嗯,我需要确定请求的来源......

【问题讨论】:

    标签: javascript html server cors xmlhttprequest


    【解决方案1】:

    源始终是加载 HTML 文档的位置。如果那是用户的文件系统,那么它将始终是null。对此你无能为力。

    如果您想知道请求来自哪里,请查看请求来自的 IP 地址。

    【讨论】:

    • 例如,我可以让我的按钮向whatismyip.com这样的服务器请求获取发送者IP,并将IP值附加到数据字段,这样服务器就可以要知道起源是什么……你的意思是这样的吗?你还有什么想法?因为您说“如果您想知道请求来自哪里,请查看请求来自的 IP 地址。”
    • 您可以在不涉及第三方的情况下从请求中获取 IP 地址(具体操作方式取决于您的服务器端环境)。
    • 服务器只是一个连接到路由器/调制解调器的简单板,我们目前正在使用从外部端口到内部端口 80 的端口转发到给这个板的内部 ip。你知道我是否可以在路由器上配置一些东西来识别请求来自哪里?
    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 2016-02-15
    • 2019-10-25
    • 2019-06-22
    • 2011-05-27
    • 2014-05-11
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多