2013-04-15 47 views
40

Tôi đã tìm thấy phần mở rộng chrome rất hữu ích này được gọi là người đưa thư, đây là một phần mở rộng rất hữu ích đặc biệt là khi bạn đang vào lập trình các ứng dụng RESTful.Cách Postman gửi yêu cầu? ajax, cùng chính sách gốc

Một điều tôi đang bối rối là plugin/tiện ích này có thể gửi yêu cầu POST thành công trên các miền khác nhau không?

Tôi đã bỏ phiếu trong cuộc thăm dò ý kiến ​​bằng cách sử dụng Người đăng bài như thế này. Voting using Postman

Sau khi gửi, phiếu bầu thực sự được tính, nhưng khi tôi thử làm điều đó bằng cách sử dụng ajax và javascript, nó không thành công, vì chính sách xuất xứ khác nhau của trình duyệt.

Điều đó thậm chí có thể như thế nào?

Đây là mã của tôi bằng cách sử dụng jquery. Tôi đã sử dụng nó trong máy tính của tôi mặc dù, 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

Có vẻ như phần mở rộng hoạt động bằng cách gửi bài đến getpostman.com thay vì tên miền mục tiêu của bạn (sử dụng CORS), máy chủ getpostman.com sau đó thực hiện yêu cầu và trả về một phản hồi. https://github.com/a85/POSTMan-Chrome-Extension/blob/master/chrome/js/requester.js#L457 –

+0

điều này có vẻ hợp pháp, tôi sẽ đọc qua mã của họ sau đó, tôi có thể cố gắng tìm ra cùng một giải pháp. –

+0

Lưu ý rằng để thực hiện CORS trong IE, bạn phải thay đổi jQuery bằng cách bao gồm một phương tiện vận chuyển thay thế. IE7 không hỗ trợ CORS. –

Trả lời

32

Ứng dụng đóng gói của Chrome có thể có quyền đối với tên miền chéo. Khi bạn cài đặt Postman, ứng dụng này sẽ cho bạn biết rằng ứng dụng này sẽ truy cập vào bất kỳ miền nào.

Bằng cách đặt */* vào mục permissions phần tệp kê khai của bạn, bạn có thể thực hiện việc này.

đọc thêm ở đây: https://developer.chrome.com/extensions/xhr.html

+2

Làm cách nào có thể? Bản thân trang web cũng không cho phép 'CORS'? – CodyBugstein

+1

@Imray Không cần tiêu đề CORS, giống như chương trình máy chủ hoặc 'curl'. – Mohsen

+0

Về cơ bản, một ứng dụng Chrome không phải là đối tượng của bảo mật Cross Origin? Vì vậy, một ứng dụng Chrome có thể truy cập cookie ngân hàng của tôi hoặc đăng nhập Facebook của tôi? – CodyBugstein

2

Âm thanh như các trang web có chứa các cuộc thăm dò (các "vote.php" kịch bản) cần phải có một "Access-Control-Allow-Origin" tiêu đề thiết lập để cho phép đăng từ danh sách các trang web (hoặc tất cả các trang).

Một giá trị của * cho tiêu đề sẽ cho phép đăng từ bất kỳ trang web:

Access-Control-Allow-Origin: * 

tức là Bạn có thể đặt sau ở đầu vote.php

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

tiện ích và ứng Chrome không tuân theo các giới hạn bảo mật tương tự được đặt trên các trang web thông thường.

mẹo gỡ lỗi khác:

Nếu bạn đang cố gắng truy cập vào các dịch vụ từ xa từ các trang web mà bạn đã mở trên hệ thống tập tin địa phương của bạn trong trình duyệt của bạn, bạn có thể thấy trình duyệt của bạn áp dụng quy tắc bảo mật khác nhau đối với họ hơn nó làm cho các tập tin được phục vụ từ một dịch vụ web.

ví dụ: Nếu bạn mở tệp cục bộ từ một vị trí như C:\MyDocuments\weboot\index.htm (Windows) hoặc \Users\joe\Sites\index.html (Mac) trong trình duyệt, yêu cầu AJAX của bạn có thể không hoạt động, ngay cả với tiêu đề được chỉ định trong hầu hết các trình duyệt.

Safari của Apple áp dụng hầu như không có giới hạn tên miền chéo cho các tệp được mở cục bộ nhưng Firefox nghiêm ngặt hơn nhiều về những gì nó cho phép, với Chrome ở đâu đó ở giữa. Chạy máy chủ web cục bộ (ví dụ: http://localhost/) là một ý tưởng hay để tránh hành vi không mong muốn.

Ngoài ra, các thư viện khác cung cấp các chức năng để xử lý các yêu cầu Ajax (chẳng hạn như AngularJS) có thể yêu cầu các tiêu đề khác được đặt trên máy chủ theo mặc định. Bạn thường có thể thấy lý do thất bại trong bảng điều khiển gỡ lỗi trình duyệt.

1

Bạn có thể thêm tiêu đề sau để gửi yêu cầu Ajax trong người đưa thư.

Content-Type  application/json 

X-Requested-With XMLHttpRequest 

Ảnh chụp màn hình

enter image description here

Credit để Orion

Các vấn đề liên quan