Tôi đang xây dựng một ứng dụng Spotify mà kéo dữ liệu JSON từ một REST API, sử dụng URL nhưTại sao các yêu cầu JSON đối với API bên ngoài của tôi bị hủy trong Ứng dụng Spotify của tôi?
http://www.mydomain.com/api/command?option=value
Trong ứng dụng Spotify tôi manifest tôi đã thiết lập các điều khoản cần thiết cho máy chủ API của tôi:
"RequiredPermissions": [ "http://*.mydomain.com" ]
Tôi cũng đã định cấu hình Chia sẻ tài nguyên nguồn gốc chéo trong tiêu đề phản hồi của API của tôi. Dưới đây là một ví dụ thực tế:
Server: nginx/0.7.65
Date: Thu, 08 Dec 2011 09:07:16 GMT
Content-Type: application/json
Connection: keep-alive
X-Powered-By: Mojolicious (Perl)
Set-Cookie: mojolicious=eyJwcmVmcyI6e30sImZpbHRlcnMiOnsicGllciI6eyJzb3VyY2VzIjpbMjBdfSwiZWxlYyI6eyJzb3VyY2VzIjpbMTMsMTddLCJ4dGFncyI6WyJzaG9lZ2F6ZSJdLCJ0YWdzIjpbImVsZWN0cm9uaWMiXX0sInB1bmtkdWIiOnsieHRhZ3MiOlsicmVnZ2FlIl0sInRhZ3MiOlsicHVuayIsImR1YiJdfX0sImV4cGlyZXMiOjEzMjMzMzg4MzZ9--c6d6214525b5d56785eebc99217394a1; Version=1; Path=/; expires=Thu, 08 Dec 2011 10:07:16 GMT
Content-Length: 23381
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: *
200 OK
Trong Spotify, trong tab chrome mạng thanh tra, tôi thấy rằng yêu cầu đang bị hủy:
Name: command www.mydomain.net/api
Method: GET
Status Text: (canceled)
Type: undefined
Initiator: jquery-1.js:7180 (Script)
Size Content: 13B (0B)
Time Latency: 21ms (0.0 days)
Nếu tôi chạy ứng dụng của tôi trong Chrome trên máy tính để bàn của tôi (bên ngoài Spotify) yêu cầu không bị hủy và tất cả đều tốt.
Tôi đang làm gì sai? Hoặc có thể đây là lỗi (tính năng?) Trong bản phát hành xem trước Spotify?
Điều đầu tiên tôi sẽ cố gắng làm là phân tích yêu cầu thực tế được thực hiện bởi Spotify sử dụng một công cụ như Wireshark. Sau đó, bạn có thể xác minh rằng a) ứng dụng Spotify đang gửi tiêu đề Gốc hợp lệ (được yêu cầu cho CORS) và b) bạn có thể thấy bất kỳ tiêu đề yêu cầu tùy chỉnh nào được gửi bởi Spotify. Lưu ý rằng thông số CORS không cho phép '*' làm giá trị cho tiêu đề Access-Control-Allow-Headers. Tôi khuyên bạn nên lặp lại các tham số bạn nhận được trong Access-Control-Request-Headers. – monsur
Tôi đã có cùng một vấn đề và như monsur đã nêu ở trên, Access-Control-Allow-Headers là vấn đề tôi gặp phải. Tôi đã thay đổi máy chủ của mình để đặt tiêu đề thành "*" và nó hoạt động. – slurmomatic
monsur - Tôi sẽ dùng thử wireshark, nhưng Chrome hiển thị yêu cầu gửi đi và không có tiêu đề bất thường nào. slurmomatic - Tôi đã có các tiêu đề cho phép được đặt thành "*". Vấn đề của bạn với Spotify? – nick