2012-03-09 25 views
5

Tôi đang cố gắng cho phép truy cập vào mọi tên miền phụ trên trang web của mình để cho phép các cuộc gọi AJAX tên miền phụ chéo. Có cách nào để xác định tất cả các tên miền phụ của một trang web như *.example.com hoặc cách khác, tại sao sau đây không hoạt động khi tôi có nhiều hơn một miền được liệt kê:Chỉ định nhiều tên miền phụ có kiểm soát truy cập Xuất xứ

header('Access-Control-Allow-Origin: http://api.example.com http://www.example.com'); 

Tôi đã đọc qua những câu dưới đây mà dường như là tương tự , nếu không giống như cái này, khác với thực tế là tôi muốn truy cập vào các tên miền phụ và cái này đề cập đến các miền chung.

Access-Control-Allow-Origin Multiple Origin Domains?

Nếu câu hỏi trên là giải pháp cho vấn đề này, sau đó làm thế nào tôi có thể lấy nguồn gốc từ tiêu đề. Có vẻ như $ _SERVER ['HTTP_ORIGIN'] là rất không đáng tin cậy và thậm chí không qua trình duyệt. Tôi cần để có thể nhìn thấy nguồn gốc trong bất kỳ trình duyệt có thể hiển thị một lỗi khi cố gắng gửi một cuộc gọi AJAX bằng cách sử dụng javascript.

+0

Như bạn đã nói, phần đầu tiên của câu hỏi của bạn được trả lời trong liên kết. Về câu hỏi thứ hai của bạn: nếu trình duyệt thử một cuộc gọi Ajax bị cấm bởi Chính sách tên miền chéo, yêu cầu sẽ không thành công và sẽ không đến được máy chủ. Lỗi sẽ phải được xử lý trong trình duyệt. –

+0

Tôi biết rằng tôi sẽ nhận được lỗi, nhưng lỗi này sẽ được cung cấp sau khi cuộc gọi đã cố truy cập vào tệp bên ngoài. Nếu tập tin từ chối nó thì lỗi sẽ được ném. Nếu tôi đặt tiêu đề để cho phép truy cập vào tất cả thì nó sẽ hoạt động, nhưng điều này là quá mở cho tôi vì vậy tôi muốn thiết lập nó có liên quan đến nguồn gốc của yêu cầu. Vì vậy, tôi muốn biết làm thế nào để có được nguồn gốc của yêu cầu bằng cách sử dụng PHP. –

+0

Bạn có thể giải thích về ý nghĩa của bạn bằng "$ _SERVER ['HTTP_ORIGIN'] không đáng tin cậy và thậm chí không duyệt qua trình duyệt"? $ _SERVER ['HTTP_ORIGIN'] là giá trị phía máy chủ không được thực hiện trong trình duyệt. – monsur

Trả lời

18

Giải pháp cho vấn đề này là sử dụng biến $ _SERVER ['HTTP_ORIGIN'] để xác định xem yêu cầu có đến từ miền được phép hay không. Sau đó, cài đặt này:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
-2

Dưới đây là một Điều tốt về Câu hỏi của bạn: http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

Nếu đó là không đủ tốt hay không hoạt động hoặc bạn cần một Proxy như thế này: https://raw.github.com/cowboy/php-simple-proxy/master/ba-simple-proxy.php

Sau đó, bạn có thể gọi Proxy với các tham số như: http://www.example.com/ba-simple-proxy.php?url=https://api.example.com

+0

"Đây là một Điều tốt về Câu hỏi của bạn" - Bài viết đó không giải quyết được câu hỏi nào cả. – Quentin

+0

"Nếu điều đó không đủ tốt hoặc không hoạt động hoặc bạn cần một Proxy như thế này" - Không. Một proxy là không cần thiết. Xem câu trả lời được chấp nhận. – Quentin

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