即使响应包含ajax请求的“设置cookie”头,cookie也不会存储在浏览器上。
请求html" target="_blank">代码:
function hitLogin(){
var loginUrl = "http://myapp:8080/login";
var geturl;
$.ajax({
type: "GET",
url : loginUrl,
data: {
user : "user1",
password : "encryptedPassword"
},
headers: {
"credentials": 'include',
"withCredentials" : true,
"crossDomain": true,
"X-Requested-With" : "XMLHttpRequest",
"Content-type" : "application/x-www-form-urlencoded",
"Accept":"text/plain",
},
success : function(data)
{
alert("Ajax request data: "+data);
},
error: function( xhr, status, error )
{
alert("Ajax request error: "+status );
}
});
}
收到的响应标题:
访问控制允许凭据:true
访问控制允许标头:X-request-With、accept、内容类型、Cookie
访问控制允许方法:POST、GET、PUT、OPTIONS、DELETE
访问控制允许来源:http://myapp2.com:7011
访问控制最大年龄:3600
内容编码:gzip
内容类型:文本/纯文本;字符集=ISO-8859-1
日期:2018年6月6日星期三15:10:09 GMT
服务器:Apache-Coyote/1.1
设置-Cookie: MYCOOKIE=62lml5_S7qS31KaFDg-SH-e8Ds5FPjljCIHzfmhxMAr8Fdrqr6fHLjI7s2XPAO2P3tNFLNLS1_fgvDXF4pLmfg#1s1S1#正常-假;路径=/;
传输编码:分块
Vary:接受编码
凭据:真
当相同的url从浏览器命中时,我可以看到存储在浏览器中的cookie,但在ajax请求的情况下,它不会被存储。因此无法发送除此cookie之外的后续请求。
如前所述,这是CORS的情况,因此jquery请求无法设置cookie。
通过CORS在浏览器上设置Cookie,带有Ajax请求
帮助查找原因,并能够使用XMLHttpRequest存储cookie,凭据设置为true
您正在以HTTP头的形式发送带有凭据的:true
,这没有任何用处。您应该将其设置为XHR字段。在jQuery中,您可以这样做:
$.ajax({
type: "GET",
url: loginUrl,
data: { /* request parameters here */ },
headers: { /* custom HTTP headers here, if you need any */ },
xhrFields: {
withCredentials: true,
},
/* other AJAX settings here */
})
此外,您发送的所有其他自定义HTTP头实际上也都是无用的:
>
跨域
也不是HTTP头。它可以用作jQuery AJAX设置(即在标题
对象之外),以强制jQuery将请求视为跨域的,即使目标URL看起来与当前页面的域相匹配。对你来说,这也没用。
jQuery会自动添加X-request-With:XMLHttpRequest
HTTP头,因此将其指定为自定义头是100%冗余的。
无需显式发送HTTP内容类型
头,因为jQuery将自动生成一个。如果您希望指定jQuery应该为请求使用哪种内容类型,那么应该使用标题
之外的内容类型
设置来指定。在任何情况下,您指定的都是默认值。
类似地,您应该使用jQuery$,而不是发送自定义HTTP
settingsAccepts
头。ajax()accepts
和/或dataType
来控制jQuery在响应中将接受哪些内容类型。通常您不需要这样做,因为jQuery使用的默认值很好,除非您的服务器配置错误并发送错误的内容类型。
本文向大家介绍浅谈Ajax请求与浏览器缓存,包括了浅谈Ajax请求与浏览器缓存的使用技巧和注意事项,需要的朋友参考一下 在现代Web应用程序中,前端代码充斥着大量的Ajax请求,如果对于Ajax请求可以使用浏览器缓存,那么可以显著地减少网络请求,提高程序响应速度。 1. Ajax Request 使用jQuery框架可以很方便的进行Ajax请求,示例代码如下: 非常简单,注意其中的第4行代码:ca
我试图找出一个跨领域的API问题。我有一个用Sencha Touch 2.3.1创建的应用程序,它使用Ajax从远程服务器获取数据。我面临的问题是,所有针对本地服务器的Ajax请求在响应中并不包含所有的头。在远程服务器上,一切正常,标题也正常。 以下是两个打印件,显示了每个服务器单独发送和接收的标头 1 -从本地主机发送和接收的头(http://local.api - vhost) 收到的邮件头:
问题内容: 我想在javascript /浏览器中启用ajax响应的缓存。 从jquery.ajax docs : 默认情况下,始终发出请求,但浏览器可能会在其缓存之外提供结果。要禁止使用缓存的结果,请将cache设置为false。如果自上次请求以来未修改资产,则导致请求报告失败,请将ifModified设置为true。 但是,这些地址都没有强制缓存。 动机: 我想在我的初始化函数中放入调用,其中
我尝试使用ETAG从api请求缓存json响应。我调用类似http://localhost:3000/api/config的代码,并获取: Thx响应。
我正在浏览一个似乎通过javascript填充数据的网页。我想为我的浏览器使用一个扩展,它可以让我看到对什么url发出了什么请求,以及从请求中返回了什么数据。 任何帮助都将不胜感激。