2011-08-10 20 views
18

Tôi đã đọc khoảng Access-Control-Allow-Origin vì có vẻ như hiệu quả khi cho phép yêu cầu miền chéo vì tôi có quyền truy cập vào trang web bên ngoài. Câu hỏi của tôi là làm cách nào để sử dụng Access-Control-Allow-Origin để cho phép yêu cầu miền chéo. Tôi đã thử điều này (đừng cười) (bằng cách mà tất cả những gì tôi muốn là một số duy nhất, 1 hoặc 0 để được trả lại)Làm cách nào để sử dụng Access-Control-Allow-Origin? Liệu nó chỉ đi vào giữa các thẻ đầu html?

<html> 
<head> 
Access-Control-Allow-Origin: * 
</head> 
<body> 
1 
</body> 
</html> 

Tôi có gần không? Cảm ơn bạn đã giúp đỡ. Nếu có một cách dễ dàng hơn để thực hiện yêu cầu tên miền chéo đơn giản, hãy cho tôi biết.

Trả lời

8

Đó là tiêu đề HTTP. Bạn sẽ cấu hình máy chủ web hoặc webapp của bạn để gửi tiêu đề này một cách lý tưởng. Có lẽ trong htaccess hoặc PHP.

Hoặc bạn có thể có thể sử dụng

<head>...<meta http-equiv="Access-Control-Allow-Origin" content="*">...</head> 

Tôi không biết nếu điều đó sẽ làm việc. Không phải tất cả tiêu đề HTTP đều có thể được định cấu hình trực tiếp trong HTML.

Tùy chọn này hoạt động như một giải pháp thay thế cho nhiều tiêu đề HTTP, nhưng xem nhận xét của @EricLaw bên dưới. Tiêu đề cụ thể này khác nhau.

Caveat

Câu trả lời này là đúng về cách đặt tiêu đề. Tôi không biết gì về việc cho phép yêu cầu miền chéo.

Về HTTP Headers

Mỗi request và response có tiêu đề. Trình duyệt sẽ gửi này cho webserver

GET /index.htm HTTP/1.1 

Sau đó, các tiêu đề

Host: www.example.com 
User-Agent: (Browser/OS name and version information) 
.. Additional headers indicating supported compression types and content types and other info 

Sau đó máy chủ sẽ gửi một phản ứng

Content-type: text/html 
Content-length: (number of bytes in file (optional)) 
Date: (server clock) 
Server: (Webserver name and version information) 

tiêu đề bổ sung có thể được cấu hình ví dụ Cache-Control, tất cả phụ thuộc vào ngôn ngữ của bạn (PHP, CGI, Java, htaccess) và máy chủ web (Apache, v.v.).

+6

Nó * phải * nằm trong tiêu đề HTTP. Hỗ trợ nó trong cơ thể sẽ là một lỗi bảo mật. – EricLaw

+0

Vui vì bạn đã đề cập đến nó. Tôi thực sự không biết cách hoạt động của tên miền chéo này. Tôi sẽ chỉnh sửa câu trả lời của mình. –

+0

Cảm ơn câu trả lời. Bây giờ tôi chỉ cố gắng tìm một máy chủ web để tôi thay đổi tiêu đề http. – davis

15

Có 3 cách để cho phép nguồn gốc miền chéo (trừ jsonp):

1) Thiết lập các tiêu đề trong trang trực tiếp sử dụng một ngôn ngữ khuôn mẫu như PHP. Hãy nhớ rằng có thể không có HTML trước tiêu đề của bạn hoặc nó sẽ thất bại.

<?php header("Access-Control-Allow-Origin: http://example.com"); ?> 

2) Sửa đổi tệp cấu hình máy chủ (apache.conf) và thêm dòng này. Lưu ý rằng "*" đại diện cho phép tất cả. Một số hệ thống cũng có thể cần bộ thông tin xác thực.Nói chung cho phép tất cả truy cập là một nguy cơ bảo mật và nên tránh:

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Credentials true 

3) Cho phép nhiều tên miền trên máy chủ web Apache thêm dòng sau vào tập tin cấu hình của bạn

<IfModule mod_headers.c> 
    SetEnvIf Origin "http(s)?://(www\.)?(example.org|example.com)$" AccessControlAllowOrigin=$0$1 
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
    Header set Access-Control-Allow-Credentials true 
</IfModule> 

4) Để sử dụng phát triển chỉ hack trình duyệt của bạn và cho phép CORS không giới hạn sử dụng Chrome Allow-Control-Allow-Origin extension

+0

Cách dễ nhất để phát triển địa phương là chỉ cần thêm phần mở rộng cors – kelevra88

+13

Cách dễ nhất để vô tình tạo mã hoạt động trong thử nghiệm nhưng thất bại một cách bí ẩn trong sản xuất là thêm phần mở rộng. ;) – dannysauer

+0

Bạn có thể cung cấp một ví dụ về cách sử dụng phần mở rộng này không? Tôi không làm cho nó hoạt động và dường như không có bất kỳ tài liệu nào. Mặc dù tôi đã thiết lập địa chỉ từ xa trong cài đặt "URL bị chặn hoặc mẫu URL", tôi vẫn thấy thư thông qua Công cụ tìm kiếm giải thích rằng quyền truy cập đã bị chặn do CORS. Và có một thiết lập "Access-Control-Expose-Headers" tôi không biết cái gì là cho. Tôi không biết nếu đó là lỗi của tôi hoặc nếu các phần mở rộng không hoạt động nữa. – Pere

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