<img> 标记对所有 Http 4XX 错误的响应是否与 404 相同?
Does an <img> tag respond to all Http 4XX errors the same as 404s?
编辑:为了澄清我的问题,以下是我试图理解的内容。
如果网页嵌入了这样的图片:
`<img src="...">`
浏览器如何处理从图像接收不同的 HTTP 错误状态代码 url?它在浏览器中是否非常一致,并且基本上被视为图像不存在 (404)?
请注意,我知道我可以 "just try it",但我没有每个 browser/os/phone 都可以尝试,我想了解它的实际工作原理在相当现代的桌面和移动浏览器中(~IE9 和更新的模糊线)。另外,如果其他人也想知道同样的事情,他们也可以来这里看看答案 ;-)
原始问题:
我正在实施一项 REST 服务,可以 returns 安全地为客户提供图像和视频。
我在想针对不同类型的故障发送不同的 HTTP 响应代码会很好:
- 一般错误为 400(请求错误)
- 401 如果用户无权查看图像
- 403 如果不允许用户查看图像(禁止)
- 404 如果找不到图像
从 HTML 和 Javascript 的角度来看,使用这些不同的错误代码进行响应是否与所有合理的现代浏览器的 404 响应完全相同?
我知道错误代码当然会有所不同,但我要确保的是没有奇怪的安全错误由于使用这些不同的 HTTP 响应而弹出。
既然您使用的是 REST,我假设您使用的是 Ajax 或 Angular 来请求您的图片,对吗?
在这种情况下,由 javascript 来捕获错误。因此,当 javascript 正确处理时,您的浏览器将不会显示任何弹出窗口。
您可以从
之类的内容开始
$.ajaxSetup({
statusCode: {
401: function(err){
console.log('Login Failed.', err.responseJSON);
// or whatever...
}
}
});
请注意,401 错误可以在响应的 header 中找到,并替换 'Content-Type: image/png' header。所以客户端(浏览器)无法知道是否请求了图像并像处理其他页面一样处理它。
很多 public API 都会给出 403,例如,当具有临时访问时间的对象过期时,Amazon 的 S3 服务会以 403 响应。
例如像这样的 url 将生成具有以下响应的 403(注意:以下不是有效的 S3 url... keys/signature 已更改)
<Error>
<script/>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<Expires>2015-02-24T13:02:33Z</Expires>
<ServerTime>2015-02-24T13:02:55Z</ServerTime>
<RequestId>F4949A0376EC9DCD</RequestId>
<HostId>
BV8KMzUcmymBUWctoB8mzFAhzcCAMil/F3NXP/KyKxJd/Hun6O2lUh4b0BsVcP9iwjL1sJxreug=
</HostId>
</Error>
编辑:为了澄清我的问题,以下是我试图理解的内容。
如果网页嵌入了这样的图片:
`<img src="...">`
浏览器如何处理从图像接收不同的 HTTP 错误状态代码 url?它在浏览器中是否非常一致,并且基本上被视为图像不存在 (404)?
请注意,我知道我可以 "just try it",但我没有每个 browser/os/phone 都可以尝试,我想了解它的实际工作原理在相当现代的桌面和移动浏览器中(~IE9 和更新的模糊线)。另外,如果其他人也想知道同样的事情,他们也可以来这里看看答案 ;-)
原始问题:
我正在实施一项 REST 服务,可以 returns 安全地为客户提供图像和视频。
我在想针对不同类型的故障发送不同的 HTTP 响应代码会很好:
- 一般错误为 400(请求错误)
- 401 如果用户无权查看图像
- 403 如果不允许用户查看图像(禁止)
- 404 如果找不到图像
从 HTML 和 Javascript 的角度来看,使用这些不同的错误代码进行响应是否与所有合理的现代浏览器的 404 响应完全相同?
我知道错误代码当然会有所不同,但我要确保的是没有奇怪的安全错误由于使用这些不同的 HTTP 响应而弹出。
既然您使用的是 REST,我假设您使用的是 Ajax 或 Angular 来请求您的图片,对吗? 在这种情况下,由 javascript 来捕获错误。因此,当 javascript 正确处理时,您的浏览器将不会显示任何弹出窗口。 您可以从
之类的内容开始$.ajaxSetup({
statusCode: {
401: function(err){
console.log('Login Failed.', err.responseJSON);
// or whatever...
}
}
});
请注意,401 错误可以在响应的 header 中找到,并替换 'Content-Type: image/png' header。所以客户端(浏览器)无法知道是否请求了图像并像处理其他页面一样处理它。
很多 public API 都会给出 403,例如,当具有临时访问时间的对象过期时,Amazon 的 S3 服务会以 403 响应。
例如像这样的 url 将生成具有以下响应的 403(注意:以下不是有效的 S3 url... keys/signature 已更改)
<Error>
<script/>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<Expires>2015-02-24T13:02:33Z</Expires>
<ServerTime>2015-02-24T13:02:55Z</ServerTime>
<RequestId>F4949A0376EC9DCD</RequestId>
<HostId>
BV8KMzUcmymBUWctoB8mzFAhzcCAMil/F3NXP/KyKxJd/Hun6O2lUh4b0BsVcP9iwjL1sJxreug=
</HostId>
</Error>