Cross-origin resource sharing是一种允许网页向另一个域(从Wikipedia)发出XMLHttpRequests的机制.

在过go 的几天里,我一直在摆弄CORS,我想我对每件事的运作方式都有很好的理解.

所以我的问题不是CORS/飞行前是如何工作的,而是大约the reason behind coming up with preflights as a new request type个.我看不出为什么服务器A需要向服务器B发送预飞行(PR)只是为了确定实际请求(RR)是否会被接受——B当然有可能在没有任何预飞行(PR)的情况下接受/拒绝RR.

在搜索了相当多之后,我找到了www.w3.org(7.1.5)的this piece条信息:

To protect resources against cross-origin requests that could not originate from certain user agents before this specification existed a preflight request is made to ensure that the resource is aware of this specification.

我发现这是有史以来最难理解的句子.我的解释(最好称之为"最佳猜测")是,它是关于保护服务器B不受服务器C不知道规范的请求的影响.

有人能解释一个场景/展示一个PR+RR比RR单独解决的问题吗?

推荐答案

我花了一些时间对飞行前请求的目的感到困惑,但我想我现在明白了.

关键的洞察力是,印前判断请求不是security件事.相反,它们是not-changing-the-rules种东西.

飞行前的请求与安全无关,它们与现在正在开发的应用程序没有关系,因为现在已经意识到CORS.相反,飞行前机制有利于开发的服务器了解CORS,它的功能是在客户端和服务器之间判断它们是否都了解CORS.CORS的开发人员认为,有足够多的服务器依赖于他们永远不会收到的假设,例如,他们发明了飞行前机制以允许双方 Select 加入的跨域删除请求.他们认为,另一种 Select 是简单地启用跨域调用,这会 destruct 太多现有的应用程序.

这里有三种情况:

  1. 旧服务器,不再在开发中,在CORS之前开发.这些服务器可能假设它们永远不会接收到例如跨域删除请求.This scenario is the primary beneficiary of the preflight mechanism.是的,这些服务可能已经被恶意或不符合标准的用户代理滥用(CORS无法改变这一点),但在CORS的世界里,印前判断机制提供了额外的"健康判断",这样客户端和服务器就不会因为Web的基本规则发生变化而崩溃.

  2. 服务器仍在开发中,但包含大量旧代码,因此审核所有旧代码以确保其在跨域世界中正常工作是不可行/不可取的.这种情况允许服务器逐渐 Select 加入CORS,例如通过说"现在我将允许该特定报头"、"现在我将允许该特定HTTP动词"、"现在我将允许发送cookie/身份验证信息"等This scenario benefits from the preflight mechanism.

  3. 使用CORS编写的新服务器.根据标准的安全实践,面对any个传入请求,服务器必须保护其资源——服务器不能相信客户端不会做恶意的事情.This scenario doesn't benefit from the preflight mechanism:飞行前机制不会给妥善保护其资源的服务器带来额外的安全性.

Html相关问答推荐

当ul为Flex时,使ul元素在指定高度内可垂直滚动

我能阻止浏览器跨跨区边界折叠空格吗?

Angular /HTML5不会播放本地文件夹中的音频mpeg

如何从卷轴中排除粘性元素?

具有可展开行的棱角material 表(垫子表),折叠时行之间仍有间隙

使用HTML进行DAX测量

如何在垂直堆叠的表格中调整人造列的大小?

Angular -表和源映射中未显示的数据错误

角化、剪裁、边缘,但仅在底部2和平滑包装上

在 laravel 中使用 DomPDF 将数据导出为 pdf 时,第二列被拉伸

如何将一个边框向下移动

如何在 Flex 对齐内容框下显示隐藏按钮和文本

CSS 随着内容宽度的增加而减少填充

如何让一个 div 元素粘在另一个元素上?

从垫分页器中删除输入边框

两个span,一个在div居中,好像没有另一个,另一个在右边

为什么使用 Css 只能看到 1 列而不是 3 列?

在包含 html 标签的字符串的子字符串中应用不同的样式

如何在react 中向按钮添加禁用属性?

CSS 斜角与 3 行对齐