为什么一个PUT 403显示为异常中止?(Why does a PUT 403 show up as

2019-09-23 03:18发布

我做了一个接受假的Django视图PUT请求:

# urls.py
url(r'^put/.*$', 'put', name='put'),

# views.py
def put(request):
    print request.method
    return HttpResponse()

现在,当我尝试做一个PUT XHR调用视图,它返回一个403:

[27 /月/ 2012 22时32分43秒] “PUT /put/x-unconverted/e02ed7da08d411e2bfa974de2b4d1b84?partNumber=115&uploadId=35UxOsGCCG98rke3VjpazmCy.0ZFpesndJ.XPp5Bw6R2CumfIsYKP5DlBYPY3gh3I0PCwfCg4DqSRttYp75bZg-- HTTP / 1.1” 403 156400

为什么它返回403,我现在不关心)。 真正的问题是这样的:

该XHR调用返回状态0(中止?!),即使真正的反应是403,与内容(注意156400的内容长度)。

为什么它不显示403回应?

编辑PUT请求时这样的:

var xhr = new XMLHttpRequest();
var path = "/" + u.settings.key;
path += "?partNumber=" + (chunk + 1) + "&uploadId=" + u.upload_id;

var method = "PUT";
var authorization = "AWS " + u.settings.access_key + ":" + signature;
var blob = u.file.slice(start, end); // mozSlice / webkitSlice, depending on browser
xhr.upload.addEventListener("progress", progress_handler);
xhr.addEventListener("readystatechange", handler);
xhr.addEventListener("error", error_handler);
xhr.addEventListener("timeout", error_handler);

xhr.open(method, /*u.settings.host*/ "http://localhost:8000/put" + path, true);

xhr.setRequestHeader("x-amz-date", date);
xhr.setRequestHeader("Authorization", authorization);
xhr.setRequestHeader("Content-Type", u.settings.content_type);
xhr.setRequestHeader("Content-Disposition", "attachment; filename=" + u.file.name);

xhr.send(blob);

Answer 1:

我想浏览器被假设它是一个跨域请求当它接收403,这意味着禁止访问。 这就是为什么浏览器不处理数据返回给发出请求的JavaScript代码的原因。 服务器应该发送“行动控制允许原产地”为所有响应头。



文章来源: Why does a PUT 403 show up as Aborted?