我在Firefox和IE瀏覽器中遇到CORS問題,而Chrome似乎處理相同的情況就好了。CORS https訪問本地主機在Chrome上工作,但不在Firefox上
我有一個要求,從瀏覽器中運行的Web應用程序訪問本地貓鼬服務器。我從我的web應用程序發送XMLHTTP請求,該應用程序是一個Google App腳本 - HTMLService(從https://script.google.com
提供)到運行本地主機上運行的貓鼬服務器的本地客戶端 - 127.0.0.1:1234。 XMLHTTP請求通過HTTPS(GET)發送到
https://localhost:1234/ping
。服務器應該以「純文本」的形式回覆「PING_OK」消息。 我們也將瀏覽器指向
https://localhost:1234/ping
有我們的測試認證接受作爲一個值得信賴的來源。 上述步驟後,Chrome瀏覽器能夠訪問本地貓鼬服務器,但Firefox失敗的消息:服務時「NS_ERROR_DOM_BAD_URI訪問受限制的URI被拒絕」(IE也失敗)
也是一個考驗html頁面來自file:///c:test.html
也能夠通過Firefox和Chrome訪問
https://localhost:1234/ping
。
這裏是在HTML的JavaScript:
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {
// code for IE6, IE5
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}
// set the onreadystatechange callback
xmlhttp.onreadystatechange = function() {
var xStatus = ['UNSENT','OPENED','HEADERS_RECEIVED','LOADING','DONE'];
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var response = xmlhttp.responseText;
console.log('Response: '+response);
} else if((xmlhttp.readyState>0) && (xmlhttp.readyState<4)){
console.log('state='+ xStatus[xmlhttp.readyState]+', status='+ xmlhttp.statusText);
} else {
console.log('state='+ xStatus[xmlhttp.readyState]+', status='+ xmlhttp.statusText);
}
}
// set the timeout value and the ontimeout callback
xmlhttp.timeout = 30000;
xmlhttp.ontimeout = function() {
console.log('XHR timed out');
}
var url = 'https://localhost:1234/ping';
var params = '';
xmlhttp.open('POST', url, true);
xmlhttp.send(params);
服務器證書是使用OpenSSL生成「」其它」(貓鼬-C++),並設置與以下選項的測試證書
這是在本地機器上的貓鼬服務器端的代碼。
void FakeWebServer::handlePingRequest(struct mg_connection *conn) {
/// Set headers
mg_send_header(conn, "Access-Control-Allow-Origin", "*");
mg_send_header(conn, "Access-Control-Allow-Methods", "POST, GET, OPTIONS");
mg_send_header(conn, "Access-Control-Allow-Headers", "X-PINGOTHER");
mg_send_header(conn, "Access-Control-Max-Age", "1728000");
mg_send_header(conn, "Content-Type", "text/plain");
/// Send Fake Message
std::string msg = "PING_OK";
mg_send_data(conn, msg.c_str(), strlen(msg.c_str()));
}
當部署爲通過谷歌應用程序scripy web應用程序上面的代碼高高興興地工作在Chrome,但冷杉EFOX失敗「NS_ERROR_DOM_BAD_URI:訪問受限制的URI被拒絕」
我是比較新的JavaScript編程和我不知道這是否是一個SSL相關的問題我現在面臨或CORS一個...
1 )我是否缺少任何其他參數或配置在任何一端的這種SSL訪問?
2)另外爲什麼會從文件送達頁:/// * HTML能夠通過CORS訪問
https://localhost:1234
而完全相同的HTML代碼
https://script.google.com
服務失敗時,對Firefox(和IE)。
任何指針和建議,以解決這個問題,非常感謝。
這似乎是Caja消毒的一個公開問題。 http://code.google.com/p/google-apps-script-issues/issues/detail?id=3543。 我們完全停留在這一個。我們正在尋找關於可能的黑客解決方法或替代解決方案的任何建議。 – sith 2014-09-02 03:07:29