ajax - 使用代理,使用 withCredentials 设置为 true 的 Angular 4 应用程序中未发送 Cookie
问题描述
我是 localhost 上的主机 angular 4 应用程序,因为我需要向托管在网络上的后端发出 api 请求(比如 https://example.com),所以我正在使用代理。这是我的代理配置文件。
"*": {"target":"https://example.com",
"secure": false,
"logLevel": "debug",
"changeOrigin": true }
这样我发出的每个请求都会通过目标 url 。当我向包含凭据的登录页面发出第一个请求时,我收到 cookie 作为响应。但是当我向 https://example.com/images发出另一个请求 (POST) 时,我被重定向到登录页面。我可以在我的网络中看到请求标头没有发送 cookie,但是我确实从我的第一个登录请求中收到了它们。我检查了这个问题的许多解决方案。他们中的许多人要求在我的 ajax 请求中包含 {withCredentials=true},我在每个请求中都这样做了。这是我的请求
$.ajax({
url: "https://example.com/images",
type: "POST",
crossDomain:true,
headers: {
// includes necessary headers .
},
xhrFields: {
withCredentials: true
},
data:data1 ,
//data1 is json formatted
success: function (res) {
console.log(res)
},
error: function (xhr, status) {
console.log(status);
}
});
但这并没有解决问题。我怀疑 cookie 由于代理而丢失,或者浏览器没有正确处理它们。我检查了我是否允许第三方 cookie。我需要用第二个请求发送这些会话 cookie。我尝试手动添加它们,但我没有找到一种方法来获取它们并将它们与此请求一起发送。我该如何解决这个问题?如果我删除代理,那么我会遇到 CORS 问题。我无权访问后端服务器。因此我尝试使用代理处理 CORS,该代理对登录请求正常工作。但是第二个请求没有与 cookie 一起发送。任何人都可以帮助解决这个问题?
解决方案
如果 Angular 提供了http 客户端,为什么要在 Angular 应用程序中使用 jQuery,以及为什么要使用它来执行 ajax 请求?
您最好使用它,然后使用拦截器将标头添加到请求中。
使用 Angular 时,请以 Angular 的方式进行。并使用它的工具/库/模式。
推荐阅读
- python - 使用原始查询的 Django 计数
- python - 如何更改 Scipy 的 Convolve2D() 以忽略为 0 的数组值?
- vba - 将总表插入工程图 Solidworks 宏
- java - 即使有数据,套接字输入流上也没有数据
- reactjs - 如何使用 Material UI 复选框并使用 React Hook 表单的 useFieldArray 选择 onChange
- node.js - 使用 Mongoose 创建方法时,文档被两次插入 MongoDB
- python - 为什么 Nginx 在 Django Web App 上为我的 URL 添加“?next=”?
- python - 实时变量到实时动画图 - Python
- php - 找不到 Mp4 文件编解码器
- c++ - 分段错误 wrt NULL 指针 C++