我们有一个 Web 服务,主要是通过 jquery 的 $.ajax() 从 javascript 调用。当我们从 javascript 调用方法时,我们在请求 header 中设置一个安全 token 。如果它不存在,或者未验证,我们将返回未经授权的错误。
一切正常。
但现在我们面临着返回图像文件的问题。因此,我们不是让 javascript 调用 $.ajax(),而是在 DOM 中嵌入图像标签:
<img src='http://mywebservice/imagescontroller/getAnImage?imageid=123'/>
当我们这样做时,请求 header 中没有我们的安全 token 。我能想到两个“简单”的修复方法。 1.,我们只是允许匿名访问我们的图像 URL,或者 2.,我们将安全 token 作为 URL 参数传递。
第一个选择当然不是一个好主意。第二个很简单。但在我决定采用这种方法之前,我想知道是否有一些简单的方法可以在这些类型的请求上设置请求 header ,而我却缺少这种方法。
想法?
最佳答案
简单修复:使用 session cookie。这是一个没有有效期的 cookie。它会自动随每个请求传输,并在用户关闭浏览器或您通过 JavaScript 删除 cookie 时消失。
您只需将 token 存储在那里,然后将其免费传递到您的服务器代码。
这里有一些演示内容: 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 中设置反向代理非常简单。
关于javascript - 在 URL 中设置请求 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25654468/