Tôi đang cố tải dữ liệu vào hộp thoại jQuery qua ajax nhưng yêu cầu không thành công trong Firefox (34.0.5). Hoạt động tốt và tôi không nhận được khiếu nại nào trong Chrome và Safari.CORS không hoạt động trong Firefox
conf apache của tôi chứa:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods: "PUT, GET, POST, DELETE, OPTIONS"
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
Các jQuery chỉ đơn giản là:
$('#dialog').load('example.php', function() { $('#dialog').dialog('open'); });
Firefox đáp ứng với giao diện điều khiển báo lỗi sau:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://www.example.com/example.php. This can be fixed by moving the resource to the same domain or enabling CORS.
Kiểm tra các tiêu đề phản hồi từ yêu cầu ajax tất cả dường như là nguyên vẹn thứ hai nội tuyến với những gì được khai báo trong apache. Tôi có nên bao gồm một số chỉ thị khác hoặc thay đổi cấu hình theo cách nào đó để làm việc này không?
CẬP NHẬT: Ở gốc của sự cố là tôi muốn cả hai example.com
và www.example.com
hoạt động giống nhau. Trang web được đề cập luôn có thẻ trong tiêu đề <base href="www.example.com" />
trong cả hai trường hợp vì đây là một phần của khung trang web mặc định. Tôi đã phát hiện ra rằng việc loại bỏ liên kết này cho phép yêu cầu ajax hoạt động trên example.com, ngay cả khi nó vẫn gọi cụ thể một tài nguyên từ tên miền phụ www.
Điều thú vị là nhiều khía cạnh của yêu cầu và tiêu đề phản hồi thay đổi khi thẻ này bị xóa. Đối với bất cứ ai có thể có một đầu mối về các tác động ở đây tôi dán cả hai tiêu đề yêu cầu và phản hồi bên dưới.
Dưới đây là các tiêu đề đã xóa thẻ <base>
. Trong trường hợp này gọi ajax đã thành công:
ỨNG PHÓ
HTTP/1.1 200 OK
Date: Sun, 18 Jan 2015 22:11:04 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.5
Set-Cookie: PHPSESSID=xxx; path=/; HttpOnly
language=en; expires=Tue, 17-Feb-2015 22:11:04 GMT; Max-Age=2592000; path=/; domain=www.example.com
currency=CAD; expires=Tue, 17-Feb-2015 22:11:04 GMT; Max-Age=2592000; path=/; domain=www.example.com
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public
Pragma: no-cache
Content-Encoding: gzip
access-control-allow-methods: PUT, GET, POST, DELETE, OPTIONS
access-control-allow-origin: *
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept
Content-Length: 1515
Connection: close
Content-Type: text/html; charset=utf-8
YÊU CẦU
GET /example.php HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:34.0) Gecko/20100101 Firefox/34.0 FirePHP/0.7.4
Accept: text/html, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://example.com/
Origin: http://example.com
x-insight: activate
Connection: keep-alive
Cache-Control: max-age=0
Và đây là các tiêu đề với <base>
thẻ còn nguyên vẹn. Những tiêu đề này phản ánh tình huống mà cuộc gọi ajax bị lỗi. Nó đáng chú ý là lĩnh vực 'Địa điểm' trong tiêu đề phản ứng nói 'https' mặc dù điều này đã không xảy ra qua một kết nối https:
ỨNG PHÓ
HTTP/1.1 302 Found
Date: Sun, 18 Jan 2015 22:12:26 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.5
Set-Cookie: PHPSESSID=xxx; path=/; HttpOnly
language=en; expires=Tue, 17-Feb-2015 22:12:26 GMT; Max-Age=2592000; path=/; domain=www.example.com
currency=CAD; expires=Tue, 17-Feb-2015 22:12:26 GMT; Max-Age=2592000; path=/; domain=www.example.com
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public
Pragma: no-cache
Status: 302
Location: https://www.example.com/index.php
access-control-allow-methods: PUT, GET, POST, DELETE, OPTIONS
access-control-allow-origin: *
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept
Content-Length: 0
Connection: close
Content-Type: text/html
YÊU CẦU
OPTIONS /example.php HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:34.0) Gecko/20100101 Firefox/34.0 FirePHP/0.7.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: http://example.com
Access-Control-Request-Method: GET
Access-Control-Request-Headers: x-requested-with
x-insight: activate
Connection: keep-alive
Cache-Control: max-age=0
Các tiêu đề CORS có được gửi hai lần không? Tôi đã có một vấn đề gần đây, nơi tôi đã nhầm lẫn thêm nó vào htaccess của tôi cũng như conf apache của tôi. Điều này khiến các giá trị tiêu đề được gửi hai lần khiến một số trình duyệt không hoạt động chính xác. – JohnP
Không phải là tôi có thể nhìn thấy. Tôi không có bất cứ điều gì thiết lập .htaccess chỉ apache vhost conf - mặc dù nghĩ rằng nó cũng có thể xảy ra nếu bạn sử dụng 'Header add' thay vì' Header set'. Vì nó đứng tôi chỉ nhìn thấy chúng một lần trong các tiêu đề phản ứng. – billynoah
Tôi đang gặp sự cố tương tự (hoạt động trên Chrome, không phải trong FF) nhưng không sử dụng thẻ . –
aesede