- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
概括
Safari 拒绝了一些涉及重定向的 CORS 请求,声称某些 header 是不允许的。但是该 header 从未被脚本请求过,而是由浏览器添加的,所以我认为这无关紧要。
[Error] Failed to load resource: Request header field … is not allowed by
Access-Control-Allow-Headers
.
Accept-Encoding
,然后将该字段添加到
Access-Control-Allow-Headers
DNT
重复了同样的错误.
Access-Control-Request-Headers
中包含的其他字段预检请求列表是
Cache-Control
,
Origin
和
Accept-Language
.
XMLHttpRequest
在我自己的代码中,没有任何库或框架干扰它。我绝对确定
我从来没有打过 setRequestHeader()
方法。
The author request headers is an initially empty header list.
send()
的非空参数可能会触发
Content-Type
作为作者请求 header ,但即使使用这种无参数调用,我也遇到问题。
Access-Control-Request-Headers
field由作者请求 header 组成:
If author request headers is not empty include an
Access-Control-Request-Headers
header with as header field value a comma-separated list of the header field names from author request headers in lexicographical order, each converted to ASCII lowercase (even when one or more are a simple header).
If the field name of each header in author request headers is not an ASCII case-insensitive match for one of the header field names in headers and the header is not a simple header, apply the cache and network error steps.
Let headers be the names of request's header list's headers, excluding CORS-safelisted request-headers and duplicates, sorted lexicographically, and byte-lowercased.
Let value be the items in headers separated from each other by 0x2C.
Set
Access-Control-Request-Headers
to value in preflight's header list.
send()
method specification .
Let req be a new request, initialized as follows:
Accept-Encoding
的部分或
DNT
明确提到作为预期的补充。它们被列为
forbidden headers作者不应该控制的。
Modify httpRequest's header list per HTTP.
Note: It would be great if we could make this more normative somehow. At this point headers such as
Accept-Encoding
,Connection
,DNT
, andHost
, are to be appended if necessary.
Accept
,Accept-Charset
, 和Accept-Language
此时不应包括在内。
Note:
Accept
andAccept-Language
are already included (unlessfetch()
is used, which does not include the latter by default), andAccept-Charset
is a waste of bytes. See HTTP header layer division for more details.
我发现很难判断这个添加的范围。除了作者指定的那些之外,“为每个 HTTP 添加 header ”是否是 CORS 考虑额外 header 的原因?但为什么只在重定向的情况下? HTTP-redirect fetch部分没有提到向请求 header 列表添加更多 header 。
观察到的行为会很糟糕
如果我观察到的行为符合规范,那么我主要担心的是它本质上会阻止添加新的有用的 HTTP header 。您永远不会知道哪些网站可能会突然被破坏,因为浏览器不仅开始添加它们,而且还开始将它们包含在 CORS 检查中。另一方面,只考虑作者创建的脚本,将请求创建库与服务器实现相匹配就足够了,而不必担心浏览器会做什么。对我来说听起来像是一个更理智的设置。
题
所以我重复我的主要问题:
- Safari 的行为是否是一个错误,
- 规范有问题吗,或者
- 有没有理由让事情变成这样?
解决方法
对于一台服务器,我刚刚通过 configuring my Apache 解决了这个问题至 return all headers ,但这更像是一种解决方法。我想真正了解 Safari 在这里做什么,以及为什么。
交叉链接
SO上有几个问题表明Safari在CORS和重定向的组合方面存在问题:
- Safari Ajax cors request not following redirect (2013)
接受的答案指出“Apple 声称这是编写 HTML 规范的方式”,但没有引用来源。听起来像 Webkit bug 112471 comment 2除了那个答案早于评论。- HTML5 CORS request fails in safari after redirect (2014)
接受的自我回答提出了服务器辅助的解决方法。- Safari fails CORS request after 302 redirect (2015)
未接受的答案提到了 webkit bug 98838 (未经证实)这反过来又暗示 bug 112471 (最近修复)。那个人在某些时候还提到了 bug 63460标题为“CORS 应该只处理由脚本作者设置的请求 header ”,但似乎没有就此达成明确的共识。接近尾声DNT
标志是明确命名的。- Safari turns Simple Cors Request into Preflight after 302 redirect (2015)
未答复。
右侧的类似问题列表可能会提供更多信息。
最佳答案
如果您下次将问题分开,可能会有所帮助。
Accept
,但我想不出一个会影响 CORS 的。 关于http - 由于浏览器设置的 header ,Safari 拒绝重定向的 CORS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39354408/
Safari 和 Mobile Safari 在组合边框半径、填充和边框时似乎有问题。在 Chrome 和 Firefox 中运行良好。 CSS: img { width: 200px;
每次我在打开 Safari 开发工具的情况下加载页面(无论是哪个选项卡)时,都会触发一些断点,并且我会被重定向到“源代码”选项卡,并显示消息“调试器已暂停”。问题是我没有设置任何断点,至少是有意的,这
我有一个复合 div(它有 translate3d)和一个 opacity过渡: #bad { background-color: red; -webkit-transition: o
我想为我正在制作的工具添加一个类似的功能。我对它在代码方面的工作方式很感兴趣。我希望能够获得一个 html 页面并排除除文章之外的所有内容。 最佳答案 Readability 项目对 chrome 和
我们有一个重定向到另一台服务器的 API 端点。它是通过 XHR 调用的,似乎在大多数浏览器中都能正常工作,除了 Safari(特别是在 iOS 上)。 我在控制台中遇到的错误是:跨源重定向被跨源资源
如何在 Safari 中为网页添加 IE 等页面转换效果? 最佳答案 你可以看看这个例子:http://sachiniscool.blogspot.com/2006/01/implementing-p
所以我用拇指和周围的白色边框制作了这个圆圈。一切都在每个浏览器中都能找到,除了 safari,它不会按应有的方式呈现白色边框。那我怎样才能让它工作呢? 示例 http://jsfiddle.net/v
我找遍了这个问题的解决方案,但似乎没有任何效果,如果可以避免的话,我真的不想使用 hack。 当我将 line-height 设置为垂直居中时,我的导航栏在任何地方都居中,但在 safari 中,它的
在输入字段中输入时,safari 会创建一个基于下拉列表的联系人。我不知道如何隐藏这个下拉菜单。我可以隐藏联系人按钮。 我正在运行 Safari 版本 11.0.1 重现 fiddle : https
我需要一个苹果脚本来全屏打开 safari 并隐藏小牛上的工具栏。 这听起来很容易,但事实并非如此! 我需要打开 safari,然后以全屏模式打开谷歌,然后隐藏工具栏。 这将是以下示例的等效项,但对于
嗨, friend 们,我开发了一个 safari 扩展并且也能够构建它。 但是当我尝试安装它时,会出现以下错误: “Safari 无法安装此扩展程序。安装此扩展程序时出错” 我有一个有效的 Safa
我想将使用的扩展版本报告给服务。 有没有办法从扩展中读取扩展版本号? 最佳答案 您可以使用 displayVersion 访问该版本SafariExtension 的属性(property)类(cla
我有一个禁用模式的 Safari 浏览器扩展。我想做的是在用户进入禁用模式时以编程方式更改工具栏图标。 是否有一个 API 可以让我实现这一点,如果有,它是什么? 最佳答案 您的扩展程序拥有的任何工具
Safari 有一项“功能”,可以在您输入网址时预加载页面。 现在对于大多数用户来说,这确实是一项功能,可以加快页面加载速度。但是对于 Web 开发人员来说,它可能会带来麻烦 - 特别是当它自动加载您
我们有一个正在开发中的 PHP Web 应用程序,它不应该被公众访问(但),但我们不想实现自定义解决方案来防止这种情况发生,因此我们求助于 HTTP 基本身份验证,它通常工作正常但有是 iPhone
我正在尝试查看 Safari 本地存储中保存的单个值的全部内容(它是一个长 JSON 对象)。当我查看键/值对时,该值对于屏幕来说太长了,复制该行只会复制该值的可见部分。有没有办法看到整条线? 最佳答
出于开发目的,我需要在我的计算机上的 Safari(Windows 上)中禁用同源策略。 在 Chrome 中,这可以通过使用标志 --disable-web-security 启动来完成。 Safa
我正在开发网站并创建应用程序。我想知道如何通过 safari 等网络浏览器检查元素。 在普通的 Chrome、Firefox、Explorer 或任何其他浏览器中,我们将右键单击鼠标按钮或按功能键 F
我有兴趣针对 Safari 浏览器进行一些开发,但我不确定它是否是开源项目?我知道 webkit 是开源的,但这并不意味着浏览器是开源的。 我已经给苹果发了电子邮件,但他们的回复不是很及时,所以我想知
我有一个正确的/etc/hosts 文件,其中包含以下内容: 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 l
我是一名优秀的程序员,十分优秀!