2011-10-08 37 views
6

Tôi có một trang web và máy chủ REST api của tôi.Từ chối nhận tiêu đề không an toàn "Vị trí"

Tôi thực hiện yêu cầu đăng bài ajax lên máy chủ REST để tạo mô hình mới. Câu trả lời cho yêu cầu này sẽ là phản hồi "HTTP/1.1 201 Created" với tiêu đề "Vị trí: http://myapi.com/some/path/111" Nhưng tôi nhận được thông báo lỗi Refused to get unsafe header "Location". Tôi biết rằng điều này là do chính sách truy cập miền chéo và bla bla bla khác.

Có ai biết cách khắc phục không? Có lẽ tôi phải thêm tiêu đề "Access-Controll-Allow-SOMETHINGHERE" vào phản hồi?

UPD:

URL trang web http://www.mydomain.com/

URI gốc là http://api.mydomain.com/model/ và mới Location URI là http://api.mydomain.com/model/211

URI gốc được sử dụng để yêu cầu ajax POST, mà phản ứng với tiêu đề Location mới.

+0

URL ban đầu là gì và URL vị trí mới là gì? –

Trả lời

1

Tôi chỉ làm việc xung quanh nó, hoặc bằng cách trả lại vị trí mới dưới dạng giá trị từ cuộc gọi hoặc có mã máy khách biết nơi lưu trữ mục mới tạo.

Tùy chọn khác là tạo proxy cho các cuộc gọi trên tên miền gốc.

0
header Location: http://myapi.com/some/path/111" 

Đoạn mã đó hoàn toàn sai. Sử dụng nó đúng, hoặc gần như sửa chữa.

Hãy thử điều này:

header("Location: http://myapi.com/some/path/111"); 

hoặc

header("Location: http://myapi.com/some/path/111"); exit(); 

Nếu đây không phải làm việc, cho tôi biết :-)

+1

Cảm ơn Stian, nhưng tôi biết cách thêm tiêu đề Vị trí bằng PHP. Vấn đề là trong chính sách tên miền chéo hoặc một cái gì đó như thế này. Tôi gặp lỗi 'Từ chối nhận tiêu đề không an toàn“ Vị trí ”trong bảng điều khiển trình duyệt, thay vì đi theo URI mới. –

4

Đó là bởi vì tiêu đề vị trí không được tiếp xúc với khách hàng gọi (trong này trường hợp mã ajax của bạn) theo mặc định (nó 'không an toàn'). Để hiển thị quảng cáo, bạn phải trả lại tiêu đề bổ sung:

Access-Control-Expose-Headers: Location 

Trình duyệt này sẽ hiển thị để khách hàng có thể đọc nó. Bạn có thể thêm vào đó nhân các tiêu đề được phân tách bằng dấu phẩy. Thông tin thêm về nó here. Here bạn có thể đọc phương thức nào, tiêu đề & loại nội dung an toàn (đơn giản) và không yêu cầu bất kỳ cấu hình bổ sung nào.

0

Để tải lên Amazon S3 (thông qua Dropzone chẳng hạn) bạn cần điều này trong cấu hình CORS của bạn.

<ExposeHeader>location</ExposeHeader> 
Các vấn đề liên quan