Cách tạo yêu cầu tên miền chéo bằng Angular 2? Bạn có thể cung cấp một ví dụ không? Yêu cầu giữa localhost: 3000 và localhost: 8000 tên miền chéo? Cảm ơn bạn.Cách tạo yêu cầu tên miền chéo (Góc 2)?
Trả lời
Trong thực tế, không có gì để làm trong Angular2 liên quan đến yêu cầu miền chéo. CORS là thứ được hỗ trợ bởi trình duyệt. Liên kết này có thể giúp bạn hiểu cách hoạt động:
- http://restlet.com/blog/2015/12/15/understanding-and-using-cors/
- http://restlet.com/blog/2016/09/27/how-to-fix-cors-problems/
Để có ngắn, trong trường hợp yêu cầu miền chéo, trình duyệt sẽ tự động thêm một tiêu đề Origin
trong yêu cầu . Có hai trường hợp:
- Yêu cầu đơn giản. Trường hợp sử dụng này được áp dụng nếu chúng tôi sử dụng các phương thức HTTP GET, HEAD và POST. Trong trường hợp phương thức POST, chỉ các loại nội dung có các giá trị sau được hỗ trợ:
text/plain
,application/x-www-form-urlencoded
vàmultipart/form-data
. - Yêu cầu được yêu cầu trước. Khi trường hợp sử dụng "yêu cầu đơn giản" không áp dụng, yêu cầu đầu tiên (với phương thức HTTP OPTIONS) được thực hiện để kiểm tra những gì có thể được thực hiện trong bối cảnh yêu cầu miền chéo.
Vì vậy, trên thực tế, hầu hết công việc phải được thực hiện ở phía máy chủ để trả về tiêu đề CORS. Cái chính là Access-Control-Allow-Origin
.
200 OK HTTP/1.1
(...)
Access-Control-Allow-Origin: *
Để gỡ lỗi các vấn đề này, bạn có thể sử dụng công cụ nhà phát triển trong trình duyệt (tab Mạng).
Về Angular2, chỉ cần sử dụng đối tượng Http
giống như bất kỳ các yêu cầu khác (giống miền ví dụ):
return this.http.get('https://angular2.apispark.net/v1/companies/')
.map(res => res.json()).subscribe(
...
);
Đối với tôi đó là một vấn đề khác. Điều này có thể tầm thường đối với một số người, nhưng tôi phải mất một thời gian để tìm ra. Vì vậy, câu trả lời này có thể hữu ích đối với một số người.
Tôi đã có API_BASE_URL
được đặt thành localhost:58577
. Đồng xu giảm xuống sau khi đọc thông báo lỗi lần thứ triệu. Vấn đề là ở phần mà nó nói rằng nó chỉ hỗ trợ HTTP
và một số giao thức khác. Tôi đã phải thay đổi API_BASE_URL
để nó bao gồm các giao thức. Vì vậy, việc thay đổi API_BASE_URL
thành http://localhost:58577
nó hoạt động hoàn hảo.
Bạn không thể làm gì ở phía khách hàng. Tôi đã thêm @CrossOrigin
vào bộ điều khiển ở phía máy chủ và nó hoạt động.
@RestController
@CrossOrigin(origins = "*")
public class MyController
Vui lòng tham khảo docs.
Lin
Tôi không chắc OP hỏi về Java, Spring hay REST nhưng bất cứ điều gì, tôi sẽ thêm một câu trả lời vì:/ – ochi
Spring RestController @CrossOrigin (origins = "*") hoạt động tốt. Cảm ơn. Bạn có thể thêm nó @RestController để cho phép truy cập tất cả các API REST –
Cảm ơn dude..Bạn đã làm cho tôi mỉm cười sau một thời gian dài tìm kiếm vấn đề. :) – 0991
@RestController
@RequestMapping(value = "/profile")
@CrossOrigin(origins="*")
public class UserProfileController {
SpringREST cung cấp @CrossOrigin chú thích nơi (nguồn gốc = "*") cho phép truy cập vào các API REST từ bất cứ nguồn nào.
Chúng tôi có thể thêm nó vào API tương ứng hoặc toàn bộ RestController.
Nhiều câu trả lời dài (và chính xác) tại đây. Nhưng thông thường bạn sẽ không làm những điều này bằng tay - ít nhất là không khi bạn thiết lập các dự án đầu tiên của bạn để phát triển (đây là nơi bạn thường vấp phải những thứ này). Nếu bạn sử dụng koa cho backend: sử dụng koa-cors. Cài đặt qua NPM ...
npm install --save koa-cors
... và sử dụng nó trong các mã:
const cors = require('koa-cors');
const Koa = require('koa');
const app = new Koa();
app.use(cors());
vấn đề được giải quyết.
Theo kinh nghiệm của tôi, các plugin hoạt động với http nhưng không hoạt động với httpClient mới nhất. Ngoài ra, cấu hình các tiêu đề respsonse CORS trên máy chủ không thực sự là một lựa chọn. Vì vậy, tôi đã tạo một tệp proxy.conf.json để hoạt động như một máy chủ proxy.
Đọc thêm về vấn đề này ở đây: https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md
dưới đây là tập tin prox.conf.json tôi
{
"/posts": {
"target": "https://example.com",
"secure": true,
"pathRewrite": {
"^/posts": ""
},
"changeOrigin": true
}
}
tôi đặt các tập tin proxy.conf.json ngay bên cạnh các các package.json trong cùng một thư mục
sau đó tôi đã sửa đổi lệnh bắt đầu trong tệp package.json như dưới đây
"start": "ng serve --proxy-config proxy.conf.json"
bây giờ, cuộc gọi http từ thành phần ứng dụng của tôi là như sau
return this._http.get('/posts/pictures?method=GetPictures')
.subscribe((returnedStuff) => {
console.log(returnedStuff);
});
Cuối cùng để chạy ứng dụng của tôi, tôi sẽ phải sử dụng NPM bắt đầu hoặc ng phục vụ --proxy -config proxy.conf.json
- 1. Yêu cầu miền chéo/tấn công tên miền chéo/giao thức tên miền chéo
- 2. Cách thực hiện yêu cầu tên miền chéo
- 3. Cách sử dụng yêu cầu đăng iframe (tên miền chéo)?
- 4. Yii2 REST + Tên miền chéo góc CORS
- 5. Bắt lỗi JSONP trên yêu cầu tên miền chéo
- 6. Giữ cookie sau khi yêu cầu ajax tên miền chéo
- 7. Câu hỏi về yêu cầu ajax tên miền chéo (tên miền phụ)
- 8. cách cho phép yêu cầu miền chéo trên tomcat?
- 9. Phonegap, cookies, yêu cầu miền chéo
- 10. Yêu cầu miền chéo với jQuery
- 11. yêu cầu miền chéo với JSON
- 12. Cách thực hiện yêu cầu http tên miền chéo trong Ionic Framework trên Android?
- 13. FireBug và giám sát các yêu cầu miền chéo JSONP
- 14. Cookie tên miền chéo
- 15. Cài đặt Firefox để bật yêu cầu ajax miền chéo
- 16. Yêu cầu tên miền chéo bằng PhoneGap và jQuery không hoạt động
- 17. Yêu cầu SSL tên miền chéo trong Phonegap/Cordova không hoạt động sau khi xuất APK
- 18. tên miền chéo URL
- 19. Đảo ngược các yêu cầu POST tên miền chéo sử dụng Ext.Ajax.request
- 20. Yêu cầu POST tên miền chéo không gửi cookie Ajax Jquery
- 21. Tên miền chéo Yêu cầu jQuery Ajax & Dịch vụ REST WCF
- 22. Cuộc gọi tên miền chéo Ajax
- 23. Kiểm tra đăng nhập tên miền chéo?
- 24. backbone.js và tập lệnh tên miền chéo
- 25. Yêu cầu AJAX chéo trang
- 26. cách triển khai bảo vệ csrf cho các yêu cầu miền chéo
- 27. jQuery - Cách xóa giới hạn miền chéo
- 28. Làm cách nào để truy cập vào tiêu đề Nội dung dài từ yêu cầu Ajax tên miền chéo?
- 29. Bật tên miền chéo ASP.net Web API
- 30. góc 2 http xóa không làm cho mạng yêu cầu
'CORS là thứ được hỗ trợ bởi trình duyệt' là thứ tôi đang tìm kiếm. Điều đó có nghĩa là không có gì cho khách hàng (tôi) làm ngoài việc kiểm tra nó nếu công việc phía máy chủ đã được thực hiện. –