Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我该如何防止;与不带SameSite属性的跨站点资源集关联的cookie;发出AJAX跨源请求时发出警告?_Javascript_Asp.net_Cookies_Cross Domain_Samesite - Fatal编程技术网

Javascript 我该如何防止;与不带SameSite属性的跨站点资源集关联的cookie;发出AJAX跨源请求时发出警告?

Javascript 我该如何防止;与不带SameSite属性的跨站点资源集关联的cookie;发出AJAX跨源请求时发出警告?,javascript,asp.net,cookies,cross-domain,samesite,Javascript,Asp.net,Cookies,Cross Domain,Samesite,所以,我有两个网站http://localhost/ 及http://3rdPartyLocallyHostedAPI/ (不是真实姓名)-两者都是本地intranet站点,并且由于3rdPartyCallyHostedapi的同名性质,localhost必须向其发出CORS请求 这些请求工作正常,数据返回或可以按预期发布到3rdPartyCallyHostedapi,但显示此警告: 与位于的跨站点资源关联的cookiehttp://3rdPartyLocallyHostedAPI/ 设置时没有

所以,我有两个网站http://localhost/ 及http://3rdPartyLocallyHostedAPI/ (不是真实姓名)-两者都是本地intranet站点,并且由于
3rdPartyCallyHostedapi
的同名性质,
localhost
必须向其发出CORS请求

这些请求工作正常,数据返回或可以按预期发布到
3rdPartyCallyHostedapi
,但显示此警告:

与位于的跨站点资源关联的cookiehttp://3rdPartyLocallyHostedAPI/ 设置时没有
SameSite
属性。如果Chrome的未来版本设置为
SameSite=None
Secure
,则只能提供带有跨站点请求的cookie。您可以在应用程序>存储>cookies下查看开发人员工具中的cookies,并在和中查看更多详细信息

现在,我查看了多个答案,例如,需要在服务器上设置SameSite属性的状态,这没有任何意义,因为它遇到问题的两个cookie(ss pid和ss id)是在请求中设置的,而不是在响应中返回的?这让我感到困惑,因为我不知道如何或在何处进行更改以确保将这些cookie上的SameSite策略设置为
none
secure

我认为是jQuery执行AJAX请求出了问题:

//trimType和queryValue由一些jQuery选择在别处确定,它们的值对于所问的问题并不重要。
$.ajax({
网址:'http://3rdPartyLocallyHostedAPI?q=“+trimType+”?q=“+queryValue+”&resultsOnly=true”,
数据:{
属性:(trimType=='Record')?'Title,Number,RecordRecordType':'NameString'
},
xhrFields:{
证书:正确
},
数据类型:“json”
}).完成(功能(数据){
如果(data.Results.length>0){
$resultsPane.html(“”);
对于(var i=0;i未找到结果。

”; } }).fail(函数(){ $resultsPane.html(“

未找到结果。

”; });
当它没有设置
withCredentials=true
属性,因此正在对API进行匿名身份验证(这只提供有限的访问权限,因此需要传递windows凭据),则不会出现
SameSite
警告。以下是请求标头:

GET/CMServiceAPIAuth/Location?q=%22SDC%20*%22&resultsOnly=true&properties=NameString HTTP/1.1
主机:服务器名
连接:保持活力
接受:application/json,text/javascript,*/*;q=0.01
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/84.0.4147.89 Safari/537.36
来源:http://localhost:64505
推荐人:http://localhost:64505/Home/DisplayRecord
接受编码:gzip,deflate
接受语言:英语GB,英语US;q=0.9,en;q=0.8
Cookie:ss pid=OQtDrnmok62FvLlZPnZV;ss id=cIaIcS3j0jmoouAaHHGT
chrome遇到的两个Cookie是
ss pid
ss id
,响应头没有传回Cookie:

HTTP/1.1200正常
缓存控制:专用,无缓存
内容类型:application/json;字符集=utf-8
更改:接受
服务器:Microsoft IIS/8.5
X-Content-Type-Options:nosniff
X-Powered-By:ServiceStack/4.512 NET45 Win32NT/.NET
X-AspNet-Version:4.0.30319
访问控制允许来源:http://localhost:64505
访问控制允许凭据:true
访问控制允许方法:POST、GET、OPTIONS
访问控制允许标头:内容类型、授权
持久身份验证:true
X-Powered-By:ASP.NET
日期:2020年7月27日星期一格林尼治标准时间07:02:06
内容长度:1597
那么,考虑到这些,有人能解释一下我错在哪里吗?我是否需要对jQuery AJAX进行更改以防止出现此警告(从而在警告提醒我的更改发生时防止将来出现问题),或者,我是否确实需要在服务器上设置一个额外的头,我想知道,在飞行前的选项请求中,它是否试图找出请求的SameSite设置或类似设置


通过IIS模块,我可以向服务器发送的响应添加额外的头,因此如果需要,我可以这样做-我只是不太明白警告是由哪一方引起的,希望大家能提供解释。

好吧,我想我已经做了足够的研究来找出我面临的问题,所以我会回答我自己的问题

因此,有一页真正帮助我理解SameSite是关于什么的,所以对于任何其他与SameSite有问题的人,请阅读,以便了解背后的原因以及它是如何工作的

读了一些书,看到了这个答案,帮助我把这些点联系起来。我将正在处理的网站部署到实际的web服务器上,发现以下是响应头:

HTTP/1.1200正常
缓存控制:专用,无缓存
内容类型:application/json;字符集=utf-8
更改:接受
服务器:Microsoft IIS/10.0
X-Content-Type-Options:nosniff
X-Powered-By:ServiceStack/4.512 NET45 Win32NT/.NET
X-AspNet-Version:4.0.30319
设置Cookie:ss pid=0QyVIKf4edkAKd2h4be5;expires=Fri,2040年7月27日09:58:39 GMT;路径=/;HttpOnly
设置Cookie:ss id=fmm1wqsdxgfr8q9gl6e;路径=/;HttpOnly
访问控制允许来源:http://server
访问控制允许凭据:true
访问控制允许方法:POST、GET、OPTIONS
访问控制允许标头:内容类型、授权
持久身份验证:true
WWW.Authenticat