Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使Cloudfiles FormPost返回;“访问控制允许来源”;要启用CORS的标题?_Python_Ajax_Rackspace Cloud_Cloudfiles_Pyrax - Fatal编程技术网

Python 如何使Cloudfiles FormPost返回;“访问控制允许来源”;要启用CORS的标题?

Python 如何使Cloudfiles FormPost返回;“访问控制允许来源”;要启用CORS的标题?,python,ajax,rackspace-cloud,cloudfiles,pyrax,Python,Ajax,Rackspace Cloud,Cloudfiles,Pyrax,我想在我的Rackspace CluodFiles容器中启用CORS,因此在阅读文档后,我发现我必须设置一些容器元数据(我使用Python和): 我得到的结果是: {'x-container-meta-access-control-allow-origin': 'localhost:8000', 'x-container-meta-access-control-expose-headers': 'Access-Control-Allow-Origin', 'x-container-meta-

我想在我的Rackspace CluodFiles容器中启用CORS,因此在阅读文档后,我发现我必须设置一些容器元数据(我使用Python和):

我得到的结果是:

{'x-container-meta-access-control-allow-origin': 'localhost:8000',
 'x-container-meta-access-control-expose-headers': 'Access-Control-Allow-Origin',
 'x-container-meta-access-control-max-age': '10',
 'x-container-meta-access-log-delivery': 'false'}
但是浏览器在
选项
飞行前请求中没有获得
访问控制允许原点
,因此它取消了AJAX调用:

HTTP/1.1 401 Unauthorized
Content-Length: 131
Content-Type: text/html; charset=UTF-8
Allow: HEAD, GET, PUT, POST, COPY, OPTIONS, DELETE
X-Trans-Id: txXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Date: Wed, 13 Nov 2013 20:07:34 GMT
Connection: keep-alive
少了什么


谢谢

Rackspace提供了关于如何为容器启用CORS的文档。示例7.11是一个CORS测试页面,它允许您在尝试上传文件之外测试您的配置

Test CORS页面-接受一个令牌和一个指向对象或容器的URL,让我们尝试对其调用HTTP方法

注意:我删除了“DELETE”方法,因为它可能会产生不希望的结果(例如删除容器/对象)


测试CORS
令牌


方法
得到 头 邮递 放

URL(容器或对象)



函数提交(){ var token=document.getElementById('token')。值; var method=document.getElementById('method').value; var url=document.getElementById('url')。值; document.getElementById('response_headers')。textContent=null; document.getElementById('response_body')。textContent=null; var request=new XMLHttpRequest(); request.onreadystatechange=函数(oEvent){ if(request.readyState==4){ responseHeaders='Status:'+request.Status; responseHeaders=responseHeaders+'\n状态文本:'+request.statusText; responseHeaders=responseHeaders+'\n\n'+请求。getAllResponseHeaders(); document.getElementById('response_headers')。textContent=responseHeaders; document.getElementById('response_body').textContent=request.responseText; } } 打开(方法,url); setRequestHeader('X-Auth-Token',Token); 请求发送(空); }
为了在pyrax或任何其他SDK之外设置这些值,我使用了以下代码:


请记住在适当的位置设置您的用户名、apikey和容器路径。

OP-您在浏览器端使用什么来处理文件上载。@ChrisRasco抱歉,这是一个输入错误,我使用
localhost:8000
作为允许的原始值;我还尝试了
example.com
;但问题不是标题值不正确,只是根本没有标题。我现在要测试示例页面。谢谢实际上,我的错误是,我只设置了域名和(可选)端口号的原始值。但是浏览器也会随域一起发送方案(
http://
https://
),因此容器上设置的
X-Container-Meta-Access-Control-Allow-Origin
标题也必须以方案(
http://
https://
)开头,具体取决于服务器设置。感谢@ChrisRasco为我指明了正确的方向!
HTTP/1.1 401 Unauthorized
Content-Length: 131
Content-Type: text/html; charset=UTF-8
Allow: HEAD, GET, PUT, POST, COPY, OPTIONS, DELETE
X-Trans-Id: txXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Date: Wed, 13 Nov 2013 20:07:34 GMT
Connection: keep-alive
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Test CORS</title>
  </head>
  <body>

    Token<br><input id="token" type="text" size="64"><br><br>

    Method<br>
    <select id="method">
        <option value="GET">GET</option>
        <option value="HEAD">HEAD</option>
        <option value="POST">POST</option>
        <option value="PUT">PUT</option>
    </select><br><br>

    URL (Container or Object)<br><input id="url" size="64" type="text"><br><br>

    <input id="submit" type="button" value="Submit" onclick="submit(); return false;">

    <pre id="response_headers"></pre>
    <p>
    <hr>
    <pre id="response_body"></pre>

    <script type="text/javascript">
      function submit() {
          var token = document.getElementById('token').value;
          var method = document.getElementById('method').value;
          var url = document.getElementById('url').value;

          document.getElementById('response_headers').textContent = null;
          document.getElementById('response_body').textContent = null;

          var request = new XMLHttpRequest();

          request.onreadystatechange = function (oEvent) {
              if (request.readyState == 4) {
                  responseHeaders = 'Status: ' + request.status;
                  responseHeaders = responseHeaders + '\nStatus Text: ' + request.statusText;
                  responseHeaders = responseHeaders + '\n\n' + request.getAllResponseHeaders();
                  document.getElementById('response_headers').textContent = responseHeaders;
                  document.getElementById('response_body').textContent = request.responseText;
              }
          }

          request.open(method, url);
          request.setRequestHeader('X-Auth-Token', token);
          request.send(null);
      }
    </script>

  </body>
</html>