<img/>标记是否会响应与404相同的所有Http 4XX错误?

时间:2015-02-13 15:07:59

标签: image http http-error

编辑:为了澄清我的问题,这是我想要了解的内容。

如果网页嵌入了这样的图片:

`<img src="...">`

浏览器如何处理从图片网址接收不同的HTTP错误状态代码?它是否在浏览器中非常一致,并且基本上对待图像不存在(404)?

请注意,我知道我可以“只是尝试一下”,但我没有每个浏览器/操作系统/手机都可以尝试一下,我想了解这实际上是如何合理的现代桌面和移动浏览器(~IE9和更新的模糊线)。另外,如果其他人都想知道同样的事情,他们也可以来这里看看答案; - )

原始问题:

我正在实施一项REST服务,可以为客户安全地返回图像和视频。

我认为为不同类型的故障发送不同的HTTP响应代码会很好:

  • 400表示一般错误(错误请求)
  • 如果用户无权查看图像,则
  • 401
  • 403,如果不允许用户查看图像(禁止)
  • 404,如果找不到图像

对于所有合理的现代浏览器,从HTML和Javascript角度来看,使用这些不同的错误代码进行响应是否与404响应完全相同?

我知道错误代码当然会有所不同,但我要确保的是 没有出现任何奇怪的安全错误 因使用这些错误而弹出不同的HTTP响应。

2 个答案:

答案 0 :(得分:1)

由于您正在使用REST,我假设您使用Ajax或Angular来请求您的图像,对吧? 在这种情况下,由javascript来捕获错误。因此,当javascript正确处理时,您的浏览器不会显示任何弹出窗口。 你可以从像

这样的东西开始
$.ajaxSetup({
    statusCode: {
      401: function(err){
        console.log('Login Failed.', err.responseJSON);
        // or whatever...
      }
    }
  });

注意,401error可以在响应的标题中找到,并替换'Content-Type:image / png'标题。因此,客户端(浏览器)无法知道是否请求了图像并像任何其他页面一样处理它。

答案 1 :(得分:1)

403由许多公共API提供,例如,当具有临时访问时间的对象到期时,亚马逊的S3服务以403响应。

e.g。像这样的网址会产生403以及以下响应(注意:以下不是有效的S3网址...密钥/签名已更改)

https://somebucket.s3.amazonaws.com/test/4a828d8cf5633ab41e2fb8deba599178.jpg?AWSAccessKeyId=ACIAICGLRMBL2PTLALHQ&Expires=1424782953&Signature=sWko4DDDRaBS151iEhEZzfDRbU%3D

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