javascript - 在 URL 中设置请求 header ?

标签 javascript jquery html ajax

我们有一个 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/

相关文章:

javascript - 使用 JavaScript 检查互联网连接

javascript - 仅在浏览器不是 Google Chrome 时显示消息

javascript - 在 Mysql 和 Javascript 中获取同一日期的不同时间戳?

javascript - Firefox 中的 Event.target 问题

html - 重叠内容(包括代码)

javascript - 如何缩小 html 元素以适应固定大小的 div?

php - Ping 服务器 + 进度条然后显示不同的 div

javascript - 如何在不影响其他元素的情况下使用bootstrap collapse?

javascript - 伪 :after class 的切换类

html - 移动主菜单后悬停菜单问题