Cors 同源请求原因“;访问控制允许原点不’;t匹配”;错误,尽管球场的起点匹配。注:有CSP政策w/“;沙盒“;
当CORS及其网页的URL使用完全相同的URL时,我在Firefox开发控制台中仍然会收到相同的错误消息 浏览器控制台消息包括:Cors 同源请求原因“;访问控制允许原点不’;t匹配”;错误,尽管球场的起点匹配。注:有CSP政策w/“;沙盒“;,cors,sandbox,content-security-policy,Cors,Sandbox,Content Security Policy,当CORS及其网页的URL使用完全相同的URL时,我在Firefox开发控制台中仍然会收到相同的错误消息 浏览器控制台消息包括: Cross-Origin Request Blocked: \ The Same Origin Policy disallows reading the remote resource \ at https://egbert.net/fonts/fontawesome-webfont.woff2?v=4.7.0. \ (Reason: CORS heade
Cross-Origin Request Blocked: \
The Same Origin Policy disallows reading the remote resource \
at https://egbert.net/fonts/fontawesome-webfont.woff2?v=4.7.0. \
(Reason: CORS header ‘Access-Control-Allow-Origin’ does not \
match ‘https://egbert.net’).
标题设置,lighttpd服务器
HTML设置
CSS路径
*/@font-face{
字体系列:'FontAwesome';
src:url('../fonts/fontawesome webfont.eot?v=4.7.0');
src:url('../fonts/fontawesome webfont.eot?#iefix&v=4.7.0')格式('embedded-opentype'),
url('../fonts/Fontsome webfont.woff2?v=4.7.0')格式('woff2'),
url('../fonts/Fontsome webfont.woff?v=4.7.0')格式('woff'),
url('../fonts/Fontsome webfont.ttf?v=4.7.0')格式('truetype'),
url('../fonts/fontawesome webfont.svg?v=4.7.0#fontawesomeregular')格式('svg');
字体大小:正常;
字体:普通
}
我已经确保所有字体文件都可以由同一浏览器在单独的选项卡中下载
更奇怪的是,错误消息暗示了“远程资源”。它们是完全相同的URL
没有加载插件,这是Firefox v73.0.1的安全模式
更新1
当我用绝对目录路径替换CSS的/@font-face
中的相对路径('../font')时,它没有改变任何东西
更新2
当我将scheme和domain()添加到CSS的绝对目录路径前面的/@font-face
中以获得完整的URL路径时,它没有改变任何东西
这与以下问题不同:
沙箱
替换为沙箱允许相同来源
,将解决此问题
说明:
问题描述的CORS问题最终是由浏览器将原点值设置为null
引起的。因此,即使Access Control Allow Origin
响应头被设置为通常期望的原点值(与浏览器地址栏中显示的URL匹配),但实际上并不匹配,因为浏览器已将原点设置为null
因此,您最终将陷入一个看似矛盾的境地,文档似乎与其自身的来源不匹配
回答中列出了浏览器将原点设置为null
的所有情况。问题中出现这种情况的具体原因来自HTML规范文本,其中指出如果设置了sandbox
:
…内容被视为来自唯一来源,表单、脚本和各种可能令人讨厌的API被禁用,链接被阻止指向其他浏览上下文,插件被保护。允许相同来源
关键字会将内容视为来自其真实来源,而不是强制其进入唯一来源
所以底线是:无论何时指定
sandbox
某个地方,在大多数情况下,您希望在指定时包含允许相同来源
关键字,以防止出现令人惊讶且难以排除的问题/副作用,如问题中所述的CORS问题。尝试将内容安全策略响应标题改为使用沙箱允许相同来源
而不仅仅是sandbox
——或者,从CSP策略中完全删除sandbox
指令。你添加它有什么特别的原因吗?你到底在用它来阻止什么?您需要添加允许相同来源
的原因是,如果未添加该选项,则如果指定沙盒
,则浏览器需要将文档的来源设置为空
。我认为这就是导致字体请求失败的原因:浏览器不会阻止请求,因为文档原点为null。有关浏览器何时将原点设置为null的详细信息,请参阅,解释其案例中的具体情况:当设置了sandbox
时,“内容被视为来自唯一来源;表单、脚本和各种可能令人讨厌的API被禁用,链接被阻止指向其他浏览上下文,插件被保护。allow same origin
关键字使内容被视为来自其真实来源,而不是强制其进入uniq“来源”@sideshowbarker,就是这样!!!!问题解决了!用HTTP头的CSP部分中的“沙盒允许相同来源”替换“沙盒”就成功了。哦,天哪,真是松了一口气。10天的痛苦在…秒内就解决了。至于我为什么要做这个安全性的事情,这是一个概念的证明,人们可以使用“优步”并让它工作,你也知道是的。非常感谢!更新了OP以显示HTTP-RESPONSE头的CSP部分。请在Mozilla上发布我的精彩接受答案,@sideshowbarkerA bug report,请求改进错误消息的措辞,以便其他人不会落入此陷阱。似乎有更新…sandbox
attri但是e代表iframe。“仅”代表iframe?那么主/父DOM上下文/页面呢?
Access-Control-Allow-Origin: https://egbert.net
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range
Content-Security-Policy: \
default-src 'none'; \
base-uri 'none'; \
script-src 'strict-dynamic'; \
object-src 'none'; \
style-src 'self'; \
img-src https://egbert.net/favicon.ico https://egbert.net/images/ https://egbert.net/blog/articles/*/images/*.png data:; \
media-src https://egbert.net/media/ data:; \
frame-src https://egbert.net/frames/; \
frame-ancestors 'self'; \
worker-src 'self'; \
child-src https://egbert.net/frames/; \
font-src https://egbert.net/fonts/; \
connect-src 'self' https://egbert.net/; \
form-action 'none'; \
require-trusted-types-for; \
trusted-types template; \
sandbox; \
report-uri https://ssoseo1.report-uri.com/r/d/csp/enforce; \
report-to endpoint-1; \
upgrade-insecure-requests; \
block-all-mixed-content;
Feature-Policy: accelerometer 'none'; camera 'none'; fullscreen 'self'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; notifications 'none'; payment 'none'; push 'none'; sync-xhr 'none'; speaker 'none'; usb 'none'; vibrate 'none';
Referrer-Policy: no-referrer