2011-10-08 128 views
6

我有一個網站和我的REST api服務器。拒絕獲取不安全標題「位置」

我做ajax post請求到REST服務器來創建新模型。對此請求的答案將爲「HTTP/1.1 201 Created」響應,頭「位置:http://myapi.com/some/path/111」 但我收到錯誤消息Refused to get unsafe header "Location"。我知道這是因爲跨域訪問策略和其他的bla bla bla。

有誰知道如何解決它?也許我必須在響應中添加「Access-Controll-Allow-SOMETHINGHERE」標題?

UPD:

網站URL http://www.mydomain.com/

原始URI是http://api.mydomain.com/model/和新位置的URI http://api.mydomain.com/model/211

原始URI用於AJAX POST請求,這與新的Location頭響應。

+0

什麼是原始URL,什麼是新的位置的URL? –

回答

1

我只是解決它,要麼通過返回新的位置作爲來自調用的值,要麼讓客戶端代碼知道新創建的項目存儲在哪裏。

另一種選擇是爲原始域上的調用創建代理。

0
header Location: http://myapi.com/some/path/111" 

那段代碼是完全錯誤的。使用它正確,或幾乎相關。

試試這個:

header("Location: http://myapi.com/some/path/111"); 

header("Location: http://myapi.com/some/path/111"); exit(); 

如果這樣不行,讓我知道:-)

+1

謝謝Stian,但我知道如何使用PHP添加位置標題。問題在於跨域策略或類似的東西。 我得到的錯誤'不肯不安全頭「位置」'在瀏覽器控制檯,而不是通過新的URI去。 –

4

這是因爲Location頭不暴露於調用客戶端(在此事例你的ajax代碼)默認情況下(這是'不安全')。要公開它,你必須返回額外的標題:

Access-Control-Expose-Headers: Location 

這種方式瀏覽器會公開它,所以客戶端可以閱讀它。你可以在那裏添加多個用逗號分隔的標題。更多關於它hereHere你可以閱讀哪些方法,標題&內容類型是安全的(簡單),並且不需要任何額外的配置。

0

對於Amazon S3上傳(通過懸浮窗例如),你需要這在CORS配置。

<ExposeHeader>location</ExposeHeader> 
相關問題