script中的src

<script src="http://www.somewhere.com/afile.js"></script>

浏览器在解析这个资源时,会向 src 属性指定的路径发送一个 GET 请求,以取得相应资源,假定

是一个 JavaScript 文件。这个初始的请求不受浏览器同源策略限制,但返回并被执行的 JavaScript 则受限制。

当然,这个请求仍然受父页面 HTTP/HTTPS 协议的限制。

这段话主要涉及到同源策略(Same-Origin Policy)和跨源资源共享(CORS)在浏览器中的应用。以下是对这段话的逐步解释:

同源策略

同源策略是一种安全机制,旨在防止一个网站的脚本与另一个网站的内容进行交互

同源(Same-Origin)是指两个 URL 具有相同的协议、域名和端口。只有在以下这三个条件都相同的情况下,浏览器才会认为这两个 URL 是同源的。这是为了确保安全性,防止恶意网站通过脚本访问另一个网站的内容。

1.协议(如 HTTP 或 HTTPS)

2.域名(如 example.com

3.端口(如 :80 或 :443)


请求不受同源策略限制

这意味着某些请求(例如,向第三方 API 发送请求)可以成功发送,即使它们不符合同源策略。这通常适用于以下情况:

  • JSONP: 通过 <script> 标签请求数据,通常不受同源策略限制。

  • 某些类型的请求: 比如使用 iframe 等方式加载外部内容。

返回的 JavaScript 受同源策略限制

一旦请求的响应是 JavaScript 代码并被执行,浏览器会检查该 JavaScript 是否符合同源策略。如果不符合,则会限制该脚本的执行,确保防止潜在的安全风险。

浏览器如何检查 JavaScript 是否符合同源策略主要依赖于以下几个方面:

  1. 请求的来源

当网页发送请求(如通过 <script> 标签、AJAX 或 Fetch API)时,浏览器会记录该请求的来源(即发起请求的页面的协议、域名和端口)。

  1. 响应的来源

当接收到响应(例如,一个 JavaScript 文件)时,浏览器会检查响应中包含的内容是否来自同源。如果响应是一个脚本,浏览器会比较该脚本的来源与请求页面的来源。

  1. 执行环境
  • 脚本标签: 当使用 <script> 标签加载外部 JavaScript 文件时,浏览器会在加载该文件前检查其来源。如果文件的 URL 不符合同源策略,浏览器会阻止该脚本的执行。

  • CORS

  • : 对于通过 XMLHttpRequest 或 Fetch API 进行的请求,允许跨源请求的方式是通过设置 CORS(跨源资源共享)头来实现的。服务器需要在响应中包含特定的 CORS 头(如 Access-Control-Allow-Origin)来指示哪些源可以访问其资源。

  1. 安全策略
  • Content Security Policy (CSP): CSP 是一种额外的安全层,可以帮助防止跨站脚本(XSS)攻击。如果网站设置了 CSP,浏览器会根据策略限制哪些源的脚本可以执行。
  1. 错误处理

如果脚本的来源不符合同源策略,浏览器通常会在控制台提供错误信息,指示脚本无法被执行。例如,可能会出现类似"跨源访问被阻止"的错误。

总结

浏览器通过记录请求和响应的来源、比较它们的协议、域名和端口来检查 JavaScript 是否符合同源策略。如果不符,浏览器将限制该脚本的执行,从而保护用户的安全。

HTTP/HTTPS 协议的限制

即使请求本身不受同源策略的限制,仍然需要遵循原页面的 HTTP 或 HTTPS 协议。例如:

  • 如果父页面使用 HTTPS,尝试通过 HTTP 加载资源可能会被浏览器阻止。为了安全,混合内容(HTTP 和 HTTPS 的结合)通常是被禁用的。
相关推荐
kyriewen2 小时前
我花3天抓了一个幽灵bug,凶手藏在第4层
前端·javascript·程序员
mONESY4 小时前
LangGraph.js 从零上手:把 Agent 工作流从一条线变成一张网
javascript
默_笙4 小时前
⚓ AI 的"官方答题卡":withStructuredOutput 与结构化输出的终局之战
前端·javascript
我家猫叫佩奇5 小时前
🦭 厌倦了千篇一律的线性图标?Naive Icons 正式开源
前端·javascript·css
梦诺8 小时前
vue3 keepAlive+记录滚动条
前端·javascript·vue.js
天若有情6739 小时前
开源轻量双语工具|一键批量查询 NPM 包历史下载量,支持按作者批量统计
javascript·npm·github pages·开源工具·netlify·前端开源·npm克隆量
福兮说10 小时前
纯前端把图片压缩到指定体积:canvas.toBlob 配合二分查找
前端·javascript·canvas·图片处理
志尊宝11 小时前
Vue3 零基础每日笔记(018):按键与鼠标修饰符——回车搜索、Ctrl+S 保存这样写
javascript·vue.js·笔记
可乐鸡翅yeah_11 小时前
HLS流媒体首屏起播慢深度优化,从分片、索引、播放器全链路调优
开发语言·javascript·ecmascript·m3u8·m3u8在线
开开心心就好12 小时前
低年级识字练笔顺工具,电脑和安卓端都能用
前端·javascript·网络·安全·scala·erlang·语音识别