2013-04-15 55 views
40

我發現這個非常有用的擴展稱爲郵遞員,這是一個非常有用的擴展,特別是當您編程RESTful應用程序時。郵差怎麼發送請求? ajax,同源策略

我很困惑的一件事是,這個插件/擴展如何能夠在不同的域上成功發送POST請求?

我嘗試投票使用這樣的郵差投票。 Voting using Postman

提交後,表決實際上被計入,但是當我嘗試使用ajax和javascript時,由於瀏覽器的原始策略不同而失敗。

這怎麼可能?

這是我的代碼使用jQuery。我在我的電腦中使用過,localhost。

init: function() { 
    $.ajax({ 
     url: 'http://domain.com/vote.php', 
     type:'POST', 
     dataType: 'html', 
     data: { 
      id: '1' 
     }, 
     success: function(data) { 
     if (data == 'voted') { 
      $('.set-result').html('you already voted. try again after 24 hours'); 
     } else { 
      $('.set-result').html('successfully voted'); 
     } 
    } 
    }); 
}, 
+2

看起來好像擴建工程通過張貼到getpostman.com,而不是你的目標域(CORS使用),getpostman.com的服務器然後發出請求並返回響應。 https://github.com/a85/POSTMan-Chrome-Extension/blob/master/chrome/js/requester.js#L457 –

+0

這似乎是合法的,我會通讀他們的代碼然後,我可能會嘗試拿出同樣的解決方案。 –

+0

但是請注意,要在IE中實現CORS,您必須通過包含替代傳輸來更改jQuery。 IE7根本不支持CORS。 –

回答

32

Chrome打包的應用程序可以具有跨域權限。當您安裝Postman時,它會提示您此應用將訪問任何域。

通過將*/*放置在清單文件的permissions部分中,您可以執行此操作。

在這裏閱讀更多: https://developer.chrome.com/extensions/xhr.html

+2

這怎麼可能?網站本身是否也必須允許'CORS'? – CodyBugstein

+1

@Imray不需要CORS標題,就像服務器程序或curl一樣。 – Mohsen

+0

因此,基本上,Chrome應用程序不受Cross Origin安全性限制?因此,Chrome應用可以訪問我的銀行Cookie或我的Facebook登錄信息? – CodyBugstein

2

聽起來像承載民意調查(以下簡稱「vote.php」腳本)的網站需要有一個「訪問控制允許來源」頭設置爲允許發佈一個網站列表(或所有網站)。

*爲標題將允許從任何網站發佈的值:

Access-Control-Allow-Origin: * 

即你可以把下面的vote.php頂部

header('Access-Control-Allow-Origin: *'); 

的Chrome擴展程序和應用都不受正常網頁上相同安全限制的限制。

附加調試技巧:

如果你想從你在瀏覽器中的本地文件系統上打開網頁訪問遠程服務,你可能會發現你的瀏覽器應用不同的安全規則,它們比它對從Web服務提供的文件起作用。

例如如果您在瀏覽器中從C:\MyDocuments\weboot\index.htm(Windows)或\Users\joe\Sites\index.html(Mac)等位置打開本地文件,則即使使用大多數瀏覽器中指定的標頭,您的AJAX請求也可能無法正常工作。

Apple的Safari幾乎不對本地打開的文件應用跨域限制,但Firefox對其允許的內容要求更嚴格,Chrome位於中間位置。在本地運行Web服務器(例如,在http://localhost/)是避免意外行爲的好主意。

此外,其他提供處理Ajax請求函數的庫(例如AngularJS)可能需要在服務器上默認設置其他頭文件。您通常可以在瀏覽器調試控制檯中查看失敗的原因。

1

您可以將以下標題添加到郵差發送的Ajax請求中。

Content-Type  application/json 

X-Requested-With XMLHttpRequest 

截圖

enter image description here

信用Orion