为 iframe 设置自定义 HTTP 请求标头

Posted

技术标签:

【中文标题】为 iframe 设置自定义 HTTP 请求标头【英文标题】:Set customs HTTP Request Headers for Iframes 【发布时间】:2020-05-05 19:25:45 【问题描述】:

我想设置 2 个 HTTP 请求标头(X-Forwarded-For 和用户代理)并显示我发送自定义标头的网站 在 html 中使用 iframe。所以我开始写一个javascript,它工作正常。它将正确的标头发送到我自己的网站,但不会连接到不是我自己托管的网站,并且我收到以下错误消息:

“从源 'http://myserver.com' 访问 'https://google.com/' 的 XMLHttpRequest 已被 CORS 策略阻止:不存在 'Access-Control-Allow-Origin' 标头请求的资源。” .

有没有办法解决这个问题?

这是我的 JavaScript 代码:

var xmlHttp = createXmlHttpRequestObject();

function createXmlHttpRequestObject() 
    
    var xmlHttp;
    
    if(window.XMLHttpRequest)
        xmlHttp = new XMLHttpRequest();
    
    else 
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    
    return xmlHttp;


function process() 
    if(xmlHttp)
        try 
            xmlHttp.open("GET", "https://google.com", true);
            xmlHttp.setRequestHeader("X-Forwarded-For", "1.2.3.4")
            xmlHttp.onreadystatechange = handleServerResponse;
            xmlHttp.send(null);
        
        catch(e)
            alert(  e.toString()    );
        
    


function handleServerResponse() 
    theD = document.getElementById('theD');
    
    if(xmlHttp.readyState==1) 
        theD.innerHTML += "Status 1: server connection established <br/>";      
    
    
    else if(xmlHttp.readyState==2)
    theD.innerHTML += "Status 2: request recived <br/>";        
    
    
    else if(xmlHttp.readyState==3)
    theD.innerHTML += "Status 3: processing request <br/>";     
    
    
    else if(xmlHttp.readyState==4)
    
        if(xmlHttp.status==200) 
                try 
                            texxt = xmlHttp.responseText;
                            theD.innerHTML += "Status 4: request is finsihed, response is ready <br/>";     
                            theD.innerHTML += texxt;        
            
                catch(e)
                    alert(  e.toString()    );
               
       
        
        else 
            alert(  xmlHttp.statusText );       
           
       

【问题讨论】:

你会想要使用 NodeJS,而不是客户端 javascript。 你是个了不起的人,NodeJS 运行良好。非常感谢^^ 【参考方案1】:

默认情况下,浏览器会阻止从网页访问其他网站的网页。可以使用浏览器设置来允许它。为此不存在其他方法。但是,可以使用 GET 或 POST 将某些数据发布到另一个网站,例如在支付网关的情况下。

【讨论】:

以上是关于为 iframe 设置自定义 HTTP 请求标头的主要内容,如果未能解决你的问题,请参考以下文章

当请求 API 的自定义标头错误时,将 http 状态代码设置为 417

将自定义标头设置为 websocket 请求 (ktor)

为BlazeDS和AMF发送的请求添加自定义HTTP标头

如何使用js或jQuery向ajax请求添加自定义HTTP标头?

如何在 react-native 中为 webView 请求设置自定义标头

添加多个自定义 http 请求标头之谜