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>]

304 CORS的更多相关文章

  1. 读javascript高级程序设计15-Ajax,CORS,JSONP,Img Ping

    平时用惯了jQuery.ajax之类的方法,却时常忽略了它背后的实现,本文是学习了AJAX基础及几种跨域解决方案之后的一些收获. 一.AJAX——XMLHttpRequest 谈起Ajax我们都很熟悉 ...

  2. CORS跨域资源共享你该知道的事儿

    "唠嗑之前,一些客套话" CORS跨域资源共享,这个话题大家一定不陌生了,吃久了大转转公众号的深度技术好文,也该吃点儿小米粥溜溜胃里的缝儿了,今天咱们就再好好屡屡CORS跨域资源共 ...

  3. Ajax 跨域 异步 CORS

    HTTP access control (CORS) 核心在于使用定制(添加新的header)HTTP header让浏览器和服务器有更多的相互了解,从而决定一个请求或者响应成功还是失败   对于一个 ...

  4. AJAX学习笔记2:XHR实现跨域资源共享(CORS)以及和JSONP的对比----转载

    1 前言: 首先对参考文章作者表示感谢,你们的经验总结给我们这些新手提供了太多资源.本文致力于解决AJAX的CORS问题,我在逻辑上进行了梳理:首先,系统的总结了CORS问题的起源-同源策略:其次,介 ...

  5. 前端跨域(一):CORS

    上周做了一个移动端表单提交的页面,其中涉及到了跨域问题,想来也是惭愧,因为之前一直都没有遇到过这个问题,因此都没有深入探索过,只是知道有哪几种方式,这次终于借这个机会可以把遗留的知识点补一补了. 1. ...

  6. CORS跨域资源共享简述

    什么是CORS? 默认情况下,为预防某些而已行为,浏览器的XHR对象只能访问来源于同一个域中的资源.但是我们在日常实际开发中,常常会遇到跨域请求的需求,因此就出现了一种跨域请求的方案:CORS(Cro ...

  7. 使用cors完成跨域请求处理

    跨域的含义 同源策略以及其限制内容 同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS.CSFR等攻击.所谓同源是指"协议+域名+端口&quo ...

  8. CORS详解[译]

    介绍 由于同源策略的缘故,以往我们跨域请求,会使用诸如JSON-P(不安全)或者代理(设置代理和维护繁琐)的方式.而跨源资源共享(Cross-Origin Resource Sharing)是一个W3 ...

  9. ASP.NET Web API 跨域访问(CORS)

    一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...

随机推荐

  1. IP路由协议简析

    RIP 路由信息协议 IGRP 内部网关协议 EIGRP 增强型内部网关路由协议 OSPF 开放最短路径优先   3种动态路由: 距离矢量:RIP/RIPv2  IGRP EIGRP 链路状态:OSP ...

  2. J2534 Pass-Thru Vehicle Programming ( SAE J1962 connector and Protocol )

    SAE J1962—Diagnostic Connector SAE J1850—Class B Data Communications Network Interface SAE J1939—Tru ...

  3. cdoj 65 CD Making 水题

    CD Making Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/65 De ...

  4. codeforces Gym 100187L L. Ministry of Truth 水题

    L. Ministry of Truth Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/p ...

  5. RotateAnimation详解

    其他构造器的旋转也可参考这副图. RotateAnimation旋转坐标系为以旋转点为坐标系(0,0)点.x轴为0度,顺时针方向旋转一定的角度.        1.RotateAnimation(fr ...

  6. 判断浏览器是否IE10

    项目中做打印预览时,在IE10中出现兼容性问题,需要针对IE10做特殊处理. 在网上搜了一下,有三种方法可以实现 一.特性检测:@cc_on <!--[if !IE]><!--> ...

  7. javascript Arguments对象——函数的实际参数

    在javascript函数体内,标识符arguments具有特殊含义.它是调用对象的一个特殊属性,用来引用Arguments对象.Arugments对象就像数组,注意这里只是像并不是哈. javasc ...

  8. LINUX CACHE IO THREAD

    http://www.penglixun.com/tech/system/linux_cache_discovery.html http://my.oschina.net/HardySimpson/b ...

  9. Servlet 3.0 新特性

    Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...

  10. nginx平滑重启与平滑升级的方法

    如何实现nginx平滑重启与平滑升级? 平滑重启 kill -HUP `cat /usr/local/www/nginx/logs/nginx.pid` 平滑升级nginx: cd /yujialin ...