我在Safari的CORS系统中遇到了一些奇怪的行为。我有一个从JS Fetch API发送的POST请求,如下所示:
const res = await fetch('http://localhost:8888/myPath', {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
});
根据Safari的网络监视器,请求标头如下所示:
POST /myPath HTTP/1.1
Accept: */*
Content-Type: application/json
Origin: http://my.domain.com
Content-Length: 335
Accept-Language: en-gb
Host: localhost:8888
User-Agent: Mozilla/5.0...
Referer: http://my.domain.com
Accept-Encoding: gzip, deflate
Connection: keep-alive
以下响应来自服务器:
HTTP/1.1 200 OK
Date: Tue, 28 Jul 2020 19:15:45 GMT
Vary: Origin
Content-Length: 4
Content-Type: application/json
Access-Control-Allow-Origin: http://my.domain.com
Server: uvicorn
不幸的是,我在这台机器上没有Wireshark,Safari也没有显示飞行前的请求。所以我不知道是否有飞行前的情况发生,以及情况如何。
现在的问题是:当我有一个新的浏览器会话(例如,使用私有模式)并访问触发抓取请求的文档时,一切都正常。只有在重新加载页面以再次发送CORS请求后,我才在Safari控制台中看到“由于访问控制检查,无法加载Fetch API”。所以我猜想,这与Safari如何缓存CORS请求/预飞行有关。
在Firefox和Chrome中,我的CORS请求非常有用。
我该如何解决这个问题?
在我的例子中,我使用的是http而不是https,这使得Safari不包括我的授权头。
对我来说,是广告拦截器打破了这一点。我有一个名为“advertiser_id”的查询参数,我的广告拦截器将其标识为“需要被阻止”。导致问题描述的cors错误。
仅仅禁用adblocker就解决了这个问题。
我的建议是,如果你能控制你的服务器,就在'http://localhost:8888/myPath/'.
const res = await fetch('http://localhost:8888/myPath/', {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
});
我建议这样做的原因是我有完全相同的问题。我对这个问题的不同之处在于,它表现为Safari在缓存图像上的飞行前CORS检查失败,其中图像src是一个重定向(Canvas Instructure URL重定向到AWS S3 bucket)。以你的例子来说,我怀疑这与你的本地主机和域有关。com主机名变化。
我的Safari控制台错误是主机页面的主机域被图像源的域拒绝。我希望你的类似。
FetchEvent.respondWith received an error:
TypeError: Cross-origin redirection to <actual image source>
denied by Cross-Origin Resource Sharing policy:
Origin <hosted page containing the image src redirect to image source>
is not allowed by Access-Control-Allow-Origin.
原始CORS请求是正常的。只是缓存资源的预检失败。我希望这是一个Safari错误,因为如果它是一个功能,Chrome
问题内容: 我正在使用Ionic Framework开发应用程序,并且有多个视图。路由名称是 app.view1 和 app.view2 。我使用控制器切换到下一个视图,当我单击返回时,app.view1的控制器不再执行,这在我的应用程序中非常重要。 请告诉我如何在每次路由到控制器时执行它。 问题答案: Ionic缓存视图以提高性能。它使用的功能。 Ionic最多可以缓存10个视图,不仅可以配置它
我目前正在尝试将类加载到我的应用程序中,这样我就可以过滤掉那些不包含任何test/-方法的类。我希望以后在我的应用程序中运行这些测试。 到目前为止,一切都很好-除了我正在使用的(或者可能是任何)似乎没有实际重新加载位于我的应用程序类路径上的类。 更准确地说,我的应用程序的用户首先选择一些源文件。然后将它们复制到临时位置,并将许多正则表达式匹配/替换对应用于原始源文件的副本。接下来,拷贝被编译,然后
我使用的是角度2.0.0-阿尔法.30版本。当重定向到其他路由时,刷新浏览器,其显示无法获取/路由。 你能帮我弄清楚为什么会发生这个错误吗?
null t错误显示为: null DataTables警告:表ID=Slave-Requested未知参数'0'用于行0,列0。有关此错误的详细信息,请参阅http://datatables.net/TN/4 null 我通过进行API调用得到的数据如下: 请帮帮我。如果你想要更多的信息就问。
因此,我将Json数据创建为question。Json Json: 和一个带有jQuery的调用函数: 但我会收到控制台错误,如: 无法加载文件:///c:/users/mirosz/desktop/project/test2/question.json:交叉源请求仅支持协议方案:http、data、chrome、chrome-extension、https 我做错了什么?!怎么加载那个文件?!
我有几个路线,每个路线装载3个组件。所有管线上的两个组件都相同。当我在这些路由之间移动时,我希望传递新数据,在组件的某个初始化事件上,我希望填充该组件的数据,以便它反映在UI上。我还想重新触发正在加载的组件的引导动画。我该怎么做呢。因为现在,我不知道在组件的生命周期中,我将在哪里获取数据,并使用这些新数据重新提交组件。具体来说,在myapps/1和/newapp/I中有一个主视图组件和一个侧栏组件