如何使用Angular 2創建跨域請求? 你能提供一個例子嗎? localhost:3000和localhost:8000跨域請求? 謝謝。如何創建跨域請求(Angular 2)?
回答
事實上,Angular2中沒有關於跨域請求的問題。 CORS本來就是由瀏覽器支持的。此鏈接可以幫助你瞭解它是如何工作的:
- http://restlet.com/blog/2015/12/15/understanding-and-using-cors/
- http://restlet.com/blog/2016/09/27/how-to-fix-cors-problems/
短,在跨域請求的情況下,瀏覽器會自動添加一個Origin
頭中的請求。有兩種情況:
- 簡單請求。這個用例適用於我們使用HTTP GET,HEAD和POST方法的情況。對於POST方法,僅支持具有以下值的內容類型:
text/plain
,application/x-www-form-urlencoded
和multipart/form-data
。 - 預照明請求。當「簡單請求」用例不適用時,首先請求(使用HTTP OPTIONS方法)檢查在跨域請求的上下文中可以做什麼。
所以實際上大部分的工作必須在服務器端完成才能返回CORS頭文件。主要的是Access-Control-Allow-Origin
之一。
200 OK HTTP/1.1
(...)
Access-Control-Allow-Origin: *
要調試此類問題,可以在瀏覽器(網絡選項卡)中使用開發人員工具。
關於Angular2,只需使用Http
對象像任何其他請求(例如同一個域):
return this.http.get('https://angular2.apispark.net/v1/companies/')
.map(res => res.json()).subscribe(
...
);
對我來說是另一個問題。對一些人來說這可能是微不足道的,但是花了我一段時間才弄清楚。所以這個答案可能對一些人有幫助。我的API_BASE_URL
設置爲localhost:58577
。讀完第一百萬次的錯誤信息後,硬幣掉了下來。問題在於它只支持HTTP
和其他一些協議。我必須更改API_BASE_URL
,以便它包含該協議。所以改變API_BASE_URL
爲http://localhost:58577
它完美的工作。
在客戶端無法做到這一點。 我在服務器端的控制器中添加了@CrossOrigin
,它工作正常。
@RestController
@CrossOrigin(origins = "*")
public class MyController
請參考docs。
林
@RestController
@RequestMapping(value = "/profile")
@CrossOrigin(origins="*")
public class UserProfileController {
SpringREST提供@CrossOrigin註解其中(起源= 「*」)允許從任何來源獲得的REST API。
我們可以將它添加到相應的API或整個RestController。
這裏有很多很長的(和正確的)答案。但通常你不會手動做這些事情 - 至少在你開發第一個項目的時候(這是你通常偶然發現的東西)。如果你使用koa作爲後端:使用koa-cors。通過NPM安裝...
npm install --save koa-cors
...,並在代碼中使用它:
const cors = require('koa-cors');
const Koa = require('koa');
const app = new Koa();
app.use(cors());
問題就迎刃而解了。
根據我的經驗,插件可以與http協同工作,但不能與最新的httpClient協同工作。另外,在服務器上配置CORS respsonse頭文件不是真正的選擇。所以,我創建了一個proxy.conf.json文件來充當代理服務器。
瞭解更多關於此這裏:https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md
下面是我prox.conf.json文件
{
"/posts": {
"target": "https://example.com",
"secure": true,
"pathRewrite": {
"^/posts": ""
},
"changeOrigin": true
}
}
我放在旁邊的中的package.json的proxy.conf.json文件正確文件在同一目錄中
然後我修改了package.json文件中的start命令,如下面的
"start": "ng serve --proxy-config proxy.conf.json"
現在,從我的應用程序組件的HTTP調用如下
return this._http.get('/posts/pictures?method=GetPictures')
.subscribe((returnedStuff) => {
console.log(returnedStuff);
});
最後運行我的應用程序,我不得不使用NPM啓動或納克服務--proxy -config proxy.conf.json
- 1. 如何在Angular 2中創建2個依賴的http請求
- 2. 跨域請求
- 3. 跨域請求
- 4. 跨域請求
- 5. 跨域請求
- 6. 跨域請求
- 7. 如何從我的reactjs組件創建跨域請求?
- 8. 如何從JavaScript中創建跨域DELETE請求?
- 9. 如何在Internet Explorer中創建跨域XMLHTTP請求
- 10. Angular js - 跨域請求在GET請求中被阻止
- 11. 跨域Ajax請求
- 12. 跨域請求jquery
- 13. Firefox跨域請求
- 14. 跨域Ajax請求
- 15. 跨域OAuth請求
- 16. PHP跨域請求
- 17. 跨域AJAX請求
- 18. 跨域HTTP請求
- 19. AJAX跨域請求
- 20. 跨域JSON請求?
- 21. 跨域請求子域
- 22. Angular 2 GET請求
- 23. 知道如何跨域請求jquery
- 24. 如何防止跨域的Ajax請求?
- 25. 如何使跨域XHR請求
- 26. 如何製作跨域請求
- 27. 如何允許跨域請求
- 28. 不中跨域請求
- 29. 跨域http獲取請求
- 30. Chrome擴展 - 創建一個跨域AJAX請求
'CORS是瀏覽器原生支持的東西'是我一直在尋找的東西。這意味着如果服務器端工作已經實現,除了測試它之外,客戶端(我)不需要做任何事情。 –