我们有一个主要通过javascript通过jquery的$ .ajax()调用的web服务。当我们从javascript调用方法时,我们在请求头中设置安全性令牌。如果它不存在,或者它没有验证,我们会返回未经授权的错误。
这一切都很好。
但现在我们面临着返回图像文件的问题。因此,我们不是让javascript调用$ .ajax(),而是在DOM中嵌入一个图像标记:
<img src='http://mywebservice/imagescontroller/getAnImage?imageid=123'/>
当我们这样做时,我们在请求标头中没有安全令牌。我可以想到两个“简单”修复。 1.,我们只允许匿名访问我们的图片网址,或2.我们将安全令牌作为网址参数传递。
第一选择当然不是一个好主意。第二个很简单。但在我采用这种方法之前,我想知道是否有一些简单的方法可以在这些类型的请求上设置请求标头,我不知道。
想法?
答案 0 :(得分:1)
轻松修复:使用会话cookie。这是一个没有失效日期的cookie。它将自动与每个请求一起传输,并在用户关闭浏览器后立即离开,或者您通过javascript删除cookie。
您只需将令牌存储在那里,然后免费将其发送到您的服务器代码。
在这里有一些演示内容: How do I set/unset cookie with jQuery?
如果您在另一个域上运行服务,则需要使用CORS来运行AJAX - 否则您的AJAX将运行到同源策略。使用CORS,您甚至可以使cookie工作。
见这里:CORS request - why are the cookies not sent?
如果您不想使用CORS,您还可以通过反向代理将服务域合并到您自己的域中。这将解决SOP问题并使Cookie的使用成为可能。在Apache中设置反向代理非常简单。