2014-07-09 26 views
9

Tôi nhận thấy rằng Angular của tôi đang tạo yêu cầu OPTIONS cũng trước mỗi yêu cầu POST.AngularJS - làm thế nào để vô hiệu hóa yêu cầu OPTION?

Tôi đang sử dụng Dịch vụ API tùy chỉnh để xử lý yêu cầu HTTP.

app.service('ApiService', function ($http) { 

/** 
* Process remote POST request to give URL with given params 
* @param {String} url 
* @param {String} POST params 
* @return {JSON} response from server 
*/ 
this.doHttpRequest = function (type, url, params) { 
    return $http({ 
     method: type, 
     url: url, 
     data: params, 
     timeout: 5000, 
     headers: { 
      "Content-Type": "application/json", 
     } 
    }); 
} 

}); 

Câu hỏi là:

Làm thế nào tôi có thể vô hiệu hóa nó (giá trị mà cấu hình đặt ở đâu)?

OPTIONS có phù hợp không? Tôi nghĩ rằng đó là một cái gì đó giống như "Bắt tay giữa 2 máy chủ".

phiên bản góc: 1.2.15

Cảm ơn lời khuyên.

Trả lời

17

Đó không phải là Góc. Nó là XMLHttpRequest.

Yêu cầu HTTP có nguồn gốc chéo phức tạp yêu cầu a pre-flight OPTIONS request để trình duyệt có thể tìm hiểu xem máy chủ khác có cấp quyền cho yêu cầu Ajax hay không.

Ngắn để đảm bảo yêu cầu Ajax bạn đang thực hiện là simple, không có cách nào để ngăn yêu cầu OPTIONS.

Một yêu cầu rất đơn giản:

  • Chỉ sử dụng GET, HEAD hay POST. Nếu POST được sử dụng để gửi dữ liệu đến máy chủ, Loại nội dung của dữ liệu được gửi tới máy chủ có yêu cầu HTTP POST là một trong các ứng dụng/x-www-form-urlencoded, multipart/form-data hoặc text/plain .
  • Không đặt tiêu đề tùy chỉnh với các yêu cầu HTTP (như X-Modified vv)

Trừ khi bạn muốn từ bỏ việc gửi JSON, bạn không thể sử dụng một yêu cầu đơn giản cho việc này.

2

tôi chạy vào một tình huống gần gũi, cần phải nhận được JSON với Cross-site HTTP yêu cầu và cố định nó bằng cách sử dụng jQuery yêu cầu, thay vì angularjs

$.getJSON('http://www.host.com/test.json', '', function (data) { 
    if (meta) { 
     console.log("jq success :" + JSON.stringify(data)); 
    } 
    console.log("jq success, but empty JSON"); 
}) 
    .done(function() { 
     console.log("jq second success"); 
    }) 
    .fail(function (data) { 
     console.log("jq fail " + JSON.stringify(data)); 
    }) 
    .always(function() { 
     console.log("jq complete"); 
    }); 

tôi đã sử dụng Amazon S3 CDN và TÙY CHỌN yêu cầu không hoạt động tốt với nó, vì vậy điều này đã lưu tôi. Câu trả lời từ máy chủ S3 là:

Phân phối này không được định cấu hình để cho phép phương thức yêu cầu HTTP được sử dụng cho yêu cầu này. Phân phối chỉ hỗ trợ các yêu cầu có thể lưu vào bộ nhớ cache.

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