按照文档升级了1.7.5version的swift,并且在创建container的时候带上了'X-Container-Meta-Access-Control-Allow-Origin' => '*', 'X-Container-Meta-Access-Control-Max-Age' => '1000'简单了写了一个html5的文件上传函数<script type="text/javascript">
 $(function(){
     $(".test").click(function(){
        var a;
        a=document.getElementById("file").files[0];
        var reader = new FileReader();
        reader.readAsBinaryString(a);
        reader.onload = function(){
        var client = new XMLHttpRequest();
        
        client.open("PUT",'http://10.2.15.20:8080/v1/AUTH_c27d932451c94d16b3b857f4db1939ad/con1/ob1');
        client.setRequestHeader('Host','http://10.2.15.20:8080');
        client.setRequestHeader('X-Auth-Token','9eaab77d1f304a71bb4533d49365e4cf');
        client.setRequestHeader('Content-Disposition', 'attachment; filename=ob1.jpeg')
        client.setRequestHeader('Content-Type', 'image/jpeg');
        client.setRequestHeader('Content-Length' ,a.size);
        client.send(this.result);
         }
     });
 });</script>
响应头信息格式化头信息
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Keystone uri='http://10.2.15.3:35357'
Content-Length: 381
Content-Type: text/html; charset=UTF-8
X-Trans-Id: txb5b8a563366d4acb817870012e732d2a
Date: Fri, 25 Jan 2013 07:04:04 GMT
Connection: keep-alive请求头信息格式化头信息
OPTIONS /v1/AUTH_c27d932451c94d16b3b857f4db1939ad/con1/ob1 HTTP/1.1
Host: 10.2.15.20:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Origin: http://hcloud.hualuyunhai.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: content-disposition,content-type,x-auth-token
Connection: keep-alive
请大家帮忙看看是哪里出了问题,多谢!OpenStack

解决方案 »

  1.   

    launchpad上有人回复我说是因为swift的keystoneauth middleware套件的一个bug导致keystoneauth不能读取options请求导致,但是我merge了之后问题依然存在,是不是需要把keystone也升级一下呢?
      

  2.   

    贴个日志Jan 30 17:07:23 swift-01 proxy-server Invalid user token - rejecting request
    Jan 30 17:07:29 swift-01 proxy-server Unable to find authentication token in headers: {'SCRIPT_NAME': '', 'REQUEST_METHOD': 'OPTIONS', 'PATH_INFO': '/v1/AUTH_c27d932451c94d16b3b857f4db1939ad/con1/ob1', 'HTTP_ORIGIN': 'http://hcloud.hualuyunhai.com', 'SERVER_PROTOCOL': 'HTTP/1.0', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0', 'HTTP_CONNECTION': 'keep-alive', 'eventlet.posthooks': [], 'SERVER_NAME': '10.2.15.20', 'REMOTE_ADDR': '10.2.115.37', 'eventlet.input': <eventlet.wsgi.Input object at 0x2a9bb10>, 'wsgi.url_scheme': 'http', 'SERVER_PORT': '8080', 'HTTP_ACCESS_CONTROL_REQUEST_HEADERS': 'content-disposition,content-type,x-auth-token', 'wsgi.input': <eventlet.wsgi.Input object at 0x2a9bb10>, 'HTTP_HOST': '10.2.15.20:8080', 'swift.cache': <swift.common.memcached.MemcacheRing object at 0x2a9b2d0>, 'wsgi.multithread': True, 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'wsgi.version': (1, 0), 'GATEWAY_INTERFACE': 'CGI/1.1', 'wsgi.run_once': False, 'HTTP_ACCESS_CONTROL_REQUEST_METHOD': 'PUT', 'wsgi.errors': <swift.common.utils.LoggerFileObject object at 0x2171cd0>, 'wsgi.multiprocess': False, 'HTTP_ACCEPT_LANGUAGE': 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3', 'swift.trans_id': 'tx0cddce1684a04f199a876409a3ba69cd', 'CONTENT_TYPE': None, 'HTTP_ACCEPT_ENCODING': 'gzip, deflate'}
    Jan 30 17:07:29 swift-01 proxy-server Invalid user token - rejecting request
      

  3.   

    Unable to find authentication token in headers.
    这个应该是主因吧,你的X-Auth-Token不见了,Keystone的auth_token会提取这个头去验证的。
    我的建议是你在catch_errors这个中间件吧wsgi的env输出到日志,查看一下是否存在X-Auth-Token。确定一下是客户端的问题还是服务端的问题。
    很多问题我们也没遇到过,重要的是解决问题的思路。