如何在ClojureScript中提出CORS请求?

如何在ClojureScript中提出CORS请求?,cors,clojurescript,Cors,Clojurescript,我正在玩一个演示游戏和资产预加载。我的免费测试服务器不允许存储声音,所以我尝试通过XMLHttPrequest加载免版税的声音。但是,我无法设置访问控制允许原点值 我的声音加载器将声音放入资产原子。相关部分似乎是: (defn load-sound [url] (let [request (js/XMLHttpRequest.)] (.open request "GET" url true) (.setRequestHeader request "Access-Control

我正在玩一个演示游戏和资产预加载。我的免费测试服务器不允许存储声音,所以我尝试通过XMLHttPrequest加载免版税的声音。但是,我无法设置
访问控制允许原点

我的声音加载器将声音放入资产原子。相关部分似乎是:

(defn load-sound [url]
  (let [request (js/XMLHttpRequest.)]
    (.open request "GET" url true)
    (.setRequestHeader request "Access-Control-Allow-Origin" baseurl)
    (.send request)))
…或为了完整性:

(defn load-sound [id url]
  (swap! assets #(assoc-in % [:snd id] {:data nil
                                        :ready false}))
  (let [ctx (:audio-ctx @assets)
        request (js/XMLHttpRequest.)]
    (.open request "GET" url true)
    (set! (.-responseType request) "arraybuffer")
    (.setRequestHeader request "Access-Control-Allow-Origin" baseurl)
    (dommy/listen-once! request :load
                        (fn []
                          (.decodeAudioData ctx (.-response request)
                                            (fn [buffer] (swap! assets #(assoc-in % [:snd id] {:data buffer
                                                                                               :ready true})))
                                            (fn []
                                              (asset-error! :snd id)))))
    (dommy/listen-once! request :error (fn []
                                         (asset-error! :snd id)))
    (.send request)))
在发送请求之前,我尝试添加
(.setRequestHeader“access control allow origin”baseurl)
,但它仍然会说“CORS header access control allow origin not set”

当我在Firefox的js控制台中创建请求时,输入我从cljs中逐字翻译的js代码,它成功了

我做错了什么


当然也有cljs http,但它不允许我指定头,或者…

访问控制允许源代码需要在为资源提供服务的服务器(带有声音的服务器)上设置,而不是在客户端代码中设置。我猜您的代码可以在js控制台中工作,因为这不是一个跨源上下文。从你的免费服务器,虽然。嗯,谢谢你的答复-我想,我还需要在客户端指定它吗?我也从控制台中的另一台服务器请求了。。。那么我怎么可能没有跨源呢?如果你看这里,你会发现客户端请求没有那个头。您确定要从中加载数据的服务器允许CORS吗?需要在为资源提供服务的服务器(带有声音的服务器)上设置访问控制允许源,而不是在客户端代码中设置。我猜您的代码可以在js控制台中工作,因为这不是一个跨源上下文。从你的免费服务器,虽然。嗯,谢谢你的答复-我想,我还需要在客户端指定它吗?我也从控制台中的另一台服务器请求了。。。那么我怎么可能没有跨源呢?如果你看这里,你会发现客户端请求没有那个头。您确定要从中加载数据的服务器允许CORS吗?