304 CORS

304响应, CORS问题: 没有 Access-Control-Allow-Origin 这个头信息时,以前次返回的200请求为准。

示例:可能已被删除
http://7af3zm.com1.z0.glb.clouddn.com/ajax_304_cors.html

附上源码:
html

<!doctype html>
<html>
<head>
	<meta charset="UTF-8">
</head>
<body>
<script type="text/javascript">
// var _ajax_34re = false;
	function getAjax () {
		var _ajax_34re = false;
		if (_ajax_34re) {
			return _ajax_34re;
		}
		try {
			_ajax_34re = new XMLHttpRequest();
	   } catch (trymicrosoft) {
	     try {
			_ajax_34re = new ActiveXObject("Msxml2.XMLHTTP");
	     } catch (othermicrosoft) {
	       try {
			_ajax_34re = new ActiveXObject("Microsoft.XMLHTTP");
	       } catch (failed) {
			_ajax_34re = false;
	       }
	     }
	   }
		return _ajax_34re;
	}

	function load(url) {
		request =  getAjax ();
		request.open("GET", url);
    	request.onreadystatechange = updatePage;
    	request.send(null);
   }

   function updatePage() {
     if (request.readyState == 4)
       if (request.status == 200)
         alert("Server is done!" + request.responseText);
       else if (request.status == 404)
         alert("Request URL does not exist");
       else
         alert("Error: status code is " + request.status);
   }


</script>
<pre>
	access: 200、304响应都有 Access-Control-Allow-Origin:*;
	access-non: 200、304响应都 没 有 Access-Control-Allow-Origin;
	access-200: 200响应都有 Access-Control-Allow-Origin:*, 304响应 没 有 Access-Control-Allow-Origin;
</pre>
<input type="button" onclick='load("http://73a8eb41cb.a.passageway.io/access")' value="access" />
<input type="button" onclick='load("http://73a8eb41cb.a.passageway.io/access-non")' value="access-non" />
<input type="button" onclick='load("http://73a8eb41cb.a.passageway.io/access-200")' value="access-200" />
</body>
</html>

clojure

(ns base-web.handler
  (:require [compojure.core :refer :all]
            [compojure.route :as route]
            [ring.middleware.defaults :refer [wrap-defaults site-defaults]]
            [clojure.pprint :as log]))

(def my-route
    (-> site-defaults
        (assoc-in [:security :anti-forgery] false)
        (assoc-in [:params] false)
        ))

(defn print-req [req]
    (println )
    (log/pprint my-route)
    (log/pprint req)
    (log/pprint (slurp (:body req)))
    (println "done"))

(defn access-200 [req]
    (let [etag "e-access-200"]
    (if (not= etag (get-in req [:headers "if-none-match"]))
        (do (println "200")
            {:status 200,
             :headers {"Content-Type" "application/json", "Access-Control-Allow-Origin" "*", "ETag" etag}
             :body "{\"success\":true, \"frame\": \"ring\"}"})
         (do (println "304")
            {:status 304,
                :headers {"Content-Type" "application/json", "ETag" etag}}))))

(defn access-non [req]
    (let [etag "e-access-non"]
    (if (not= etag (get-in req [:headers "if-none-match"]))
        (do (println "200")
            {:status 200,
             :headers {"Content-Type" "application/json", "ETag" etag}
             :body "{\"success\":true, \"frame\": \"ring\"}"})
         (do (println "304")
            {:status 304,
                :headers {"Content-Type" "application/json", "ETag" etag}}))))

(defn access [req]
    (let [etag "e-access"]
    (if (not= etag (get-in req [:headers "if-none-match"]))
        (do (println "200")
            {:status 200,
             :headers {"Content-Type" "application/json", "Access-Control-Allow-Origin" "*", "ETag" etag}
             :body "{\"success\":true, \"frame\": \"ring\"}"})
         (do (println "304")
            {:status 304,
                :headers {"Content-Type" "application/json", "ETag" etag}}))))

(defroutes app-routes
  (GET "/access-200" req (access-200 req) )
  (GET "/access-non" req (access-non req) )
  (GET "/access" req (access req) )
  (ANY "*" req
    (print-req req)
    "{\"success\":true, \"frame\": \"compojure\"}")
  (route/not-found "Not Found"))


(def app
  (wrap-defaults app-routes my-route))

;; lein ring server [<port>]

你可能感兴趣的:(CORS)