当前位置: 首页 > Web前端 > HTML

跨域跨域请求

时间:2023-03-28 16:08:16 HTML

Cookie1993迎来了img标签,这是web第一次迎来资源加载1994Set-Cookie:foo=bar1995起初,这样的设计会带来严重的问题:无论是网站,只要包含以上内容标签,它将携带cookie访问。更别提这样的要求了。所以http通过Origin头限制访问1999//XMLHttpRequest的前身newActiveXObject('Microsoft.XMLHTTP');2008varreq=新的XMLHttpRequest()req.addEventListener('load',loadListener);req.open('GET','https://example.com/data.txt');req.send();现在constres=awaitfetch('http://example.com/data.txt',{credentials:'include',});现在我们已经使用了这种方式来请求,但是也受到服务器是否响应的限制(下面是部分服务器会响应的原因)。Cross-OriginResourceSharing(CORS)我们使用access-control-allow-origin来决定哪些资源可以跨域访问,比如设置access-control-allow-origin:*允许所有资源访问。并通过设置credential决定是否携带cookie。access-control-allow-credentials:true确定是否允许您访问cookie。但同时必须通过access-control-allow-origin显式指明跨域访问的URL。这些标头已经设置在我们通过浏览器发出的请求中,我们不需要关心它们。例如,当我们通过

发送请求时,Content-Type已设置为例如x-www-form-urlencoded。小花絮:您可以发送Content-type:text/plain集的POST请求。比如通过发送邮件,只要保证像x-www-form-urlencoded这样的空行间隔即可。当Referrer从一个网站跳转到另一个网站时,会有这个头信息OriginReferrerisunreliable,所以才有了Origin头信息。Origin将出现在跨源请求中。一般来说,我们限制access-control-allow-origin站点就足够安全了。除CORSGET请求外,其他GET请求不携带Origin。判断Origin就可以知道这是不是跨域请求。跨域的危险cookie当我们在没有cookie的情况下发出请求时,可能会导致很多问题。首先,我们需要知道使用access-control-allow-origin:*时什么是安全的,比如分布在家中的物联网设备和本地请求。此外,它还可能导致CSRF攻击。限制cookie,例如通过图像跟踪。当您访问other.com时,将允许设置cookie以进行跟踪。设置SameSite:严格|松懈|没有任何。Lax不允许img、iframe、AJAX、POST表单携带cookies(当前站点为:other.com)。但是,Lax允许链接、预加载请求和GET表单携带cookie。设置cookie:sessionid=1234567;SameSite=松散;仅限HTTP;Max-Age=3153600SameSite:Strict这样会导致所有跨域都没有cookie,比如在非github网站跳转到github不会带cookie,github会显示未登录此时。httponly:无法通过javasript获取cookie跨源资源策略(CORP)跨源资源策略:同一站点标记为同一站点的资源只能从同一站点加载。Cross-Origin-Resource-Policy响应标头指示浏览器阻止对指定资源的被动跨源/跨站点请求。在下面的请求中添加CORP头信息,会导致图片加载失败。跨源资源策略:同一站点|same-origin|cross-originCORB下面的场景不能用同一个cookie来处理,虽然可以把cookie放在html请求中。这个请求还是会把html文件的请求放到进程中,表示本次请求处理完成。这可能会导致一些问题。Meltdown和SpectreCross-Origin-Read-Blocking防止跨域请求动作,跨域返回也被阻塞。比如上面的请求就不会进入浏览器的处理过程。请求进入流程前,会关注minetype是否为nosniff(nosniff会阻止浏览器优化content-type)。Chrome浏览器请求html文件而不是跨源将被阻止。CORB不是标头Cross-Origin-Embedder-Policy(COEP)Cross-Origin-Embedder-Policy:require-corp文档只能从同一来源加载资源,或者明确标记为可从另一个来源加载的资源。为了从其他来源加载资源,需要支持跨源资源共享(CORS)或跨源资源策略(CORP)。跨源嵌入器策略:require-corpCross-Origin-Resource-Policy:跨源