开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情
audio元素、img元素、link元素、script元素和video元素的默认跨域
默认情况下,这些元素对资源的请求是没有跨域限制的。
但是会对行为有一定限制:
script:请求下来的代码对于window.onerror事件获取到的错误信息的查看有一些限制。例如:内部代码在请求时跨域,无法获得详细的跨域错误描述。link:请求要是没有合适的crossorigin【跨域】头部的话,请求将会被忽略、丢弃。audio元素、img元素、link元素和video元素:当这些资源被放置在canvas标签内时,这些元素将会被标记为受污染的
作用
凭证标记解释
凭证标记啥的应该是fetch的Request.credentials。
用于表示用户代理是否应该在跨域请求的情况下从其他域发送 cookies。
omit: 从不发送 cookies.same-origin: 只有当 URL 与响应脚本同源才发送 cookies、HTTP Basic authentication 等验证信息.(浏览器默认值,在旧版本浏览器,例如 safari 11 依旧是 omit,safari 12 已更改)include: 不论是不是跨域的请求,总是发送请求资源域在本地的 cookies、HTTP Basic authentication 等验证信息。
具体功能
对<audio>元素、<img>、<link>、<script>和<video>元素有效。
该属性会将原来这些无跨域请求限制的元素,变得受跨域请求限制,并且通过该属性可以设置元素获取数据的cors请求的配置。
简单来说就是开启了cors校验,被标记的元素添加了一些设置。
属性值
anonymous:请求使用CORS头部,并且凭证标志被设置为same-origin【同源】;除非目的地是同源的,否则无法通过cookies、客户端SSL证书、HTTP身份认证来交换用户凭证,use-credentials:请求使用CORS头部,凭证标志被设置为include,并且用户凭证总被携带。- 不合法的关键字或空字符串会视为
anonymous关键字
示例
例如:对于link元素,即使href指定的文件是同源的,在需要获取请求凭证清单【rel为manifest】时也要将该属性的值设置为use-credentials
<link rel="manifest" href="/app.webmanifest" crossorigin="use-credentials" />
例如:可以使用script标签,让浏览器执行这个不发送用户凭证的脚本。此时若是脚本内部存在跨域错误的话window.onerror接收到的错误不再是简单的说明,而是变得更为详细、具体。
<script
src="https://example.com/example-framework.js"
crossorigin="anonymous">
</script>
句末语
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情