簡體   English   中英

XMLHttpRequest從遠程主機獲取HTTP響應

[英]XMLHttpRequest to get HTTP response from remote host

為什么以下代碼基於Mozilla示例不起作用? 嘗試使用Firefox 3.5.7和Chrome。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
</body>
  <script>
    var req = new XMLHttpRequest();
    req.open('GET', 'http://www.mozilla.org/', false); 
    req.send();
    if(req.status == 200) {
        alert(req.responseText);
    }
  </script>  
</html>

請瀏覽器從本地磁盤中提取html(文件:/// C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html)

在Firefox上它會出現以下錯誤:

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html :: <TOP_LEVEL> :: line 10" data: no]

我究竟做錯了什么? 我想向遠程主機提交請求並提醒結果(稍后將其添加到div中)。

您的瀏覽器阻止了跨站點腳本 您必須使用相對路徑,否則大多數瀏覽器將只返回錯誤或空的responseText。

以下Stack Overflow帖子可能也與您的問題有關:

我還假設你已經在瀏覽器中直接打開了你的HTML測試頁面,你可以參考file:///... 對於XMLHttpRequest調用,您需要從服務器提供HTML。 嘗試使用xampp( http://www.apachefriends.org/en/xampp.html )來啟動並運行本地服務器,然后從http://localhost/XMLHTTP.html運行測試。

注意,這不能解決您的同源問題,但這將允許以下代碼工作:

  <script>
    var req = new XMLHttpRequest();
    req.open('GET', '/myTestResponse.html', false); 
    req.send();
    if(req.status == 200) {
        alert(req.responseText);
    }
  </script>

安全問題沒有?

據推測,firefox阻止本地文件與遠程主機通話?

在網上偵察 - 發現了這一點。 嘗試將此添加到腳本的開頭:

try {
  netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
  alert("Permission UniversalBrowserRead denied.");
}

不能保證這個工作; 因為你最終要做的就是進入一個安全漏洞,瀏覽器已被專門編碼為已插入(跨域請求)。

但是,有一些特殊的場景可以打開,通常由用戶自行決定。

即使使用本地文件,也無法跨域發出請求。

https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript

除非您正在開發一個擴展,它沒有與網頁相同的限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM