0
我在我的項目中有一些服務。 user.service.t.js 我想獲得某個站點的請求,例如sites.com並獲取網站的內容。我這樣做,寫下如下。請求一些網站與angular2
getSites(user) {
let body = JSON.stringify(user);
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Access-Control-Allow-Headers', 'Content-Type');
headers.append('Access-Control-Allow-Origin', '*');
headers.append('Access-Control-Allow-Credentials', "true");
headers.append('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
var requestoptions = new RequestOptions({
method: RequestMethod.Get,
url: "http://www.joomag.com/",
headers: headers,
withCredentials: true
})
return this.http.post("http://www.sites.com/", <RequestOptionsArgs> {withCredentials: true, headers: headers})
.map((res: Response) => {
if (res) {
return { status: res.status, json: res.json() }
}
});
}
不過,我得到這個錯誤:
XMLHttpRequest cannot load http://www.sites.com/. Response for preflight is invalid (redirect)
error_handler.js:45 EXCEPTION: Response with status: 0 for URL: null.
我怎樣才能做到這一點。
當我使用快遞服務器向遠程站點發送請求時,它工作正常。現在我想通過服務angular2來請求。當我使用jsonp時,它不適合我。 –
這是CORS,它是一個瀏覽器功能,因此如果您從服務器發送請求,則不會遇到類似的情況。要麼你可以讓服務器發送所需的頭文件,要麼你可以使用JSONP,它有一些限制(沒有自定義頭文件),否則你運氣不好。另一種方法是向自己的服務器發出請求,並將請求從服務器轉發給您實際想要聯繫的服務器(因爲如上所述,CORS僅影響瀏覽器)。 –