问题标签 [http-content-range]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - OneDrive API Node.js - 无法使用:/createUploadSession 内容范围错误
我的问题是我无法上传大于 4MB 的文件,所以我根据 createuploadsession 使用了createuploadsession
我从 createuploadsession 响应中成功获取了 uploadUrl 值。现在我尝试使用此代码发出 PUT 请求
但是如果我尝试的话,我也会得到“无效的 Content-Range 标头值”作为响应
我会得到同样的回应。
此外,我不想分块我的文件,我只想在 1run 中完整上传我的文件。有没有人有从 createuploadsession 响应上传文件到 uploadUrl 的示例代码。另外,在上传大于 4mb 的文件之前,我真的需要先获取这个 uploadurl,还是有其他方法?
html - 如何将最初未知大小的视频流式传输到 HTML5 视频标签?
我正在尝试编写一个 Web 服务(使用 C# 和 WebAPI,认为实际的服务器技术可能并不重要),它托管动态视频文件以供基本的 HTML5 视频元素使用。
这是我的情况和我的要求:
- 视频正在动态转码,因此最终文件大小未知。我无法提供
Content-Length
. 但是,视频的持续时间是预先知道的。 - 视频必须在页面加载时立即播放,即使它没有完成转码。
- 用户必须能够通过 HTML5 视频控件在视频中向后和向前搜索。如果他们试图向前寻找未转码的点,则请求将阻塞,直到转码赶上。
我尝试使用206: Partial Content
带有标题的响应,Content-Range
但由于我无法提供 a content-length
,Chrome 中的播放器似乎无法搜索它获得的第一块视频,而 Firefox 中的播放器甚至不会尝试下载比第一个更多的视频块。响应超出客户端要求的范围也是无效的,但视频播放器总是要求字节 0+。
如果没有内容长度,我考虑使用Transfer-Encoding: chunked
和分块输出。但是,如果服务器不支持远程请求,Chrome 将不允许您搜索视频。
我还考虑过指定一个 1TB 的虚假内容长度或一些荒谬的东西,以便我可以执行范围响应选项,但我不知道这是否会影响进度条或搜索功能。HTML5 视频播放器是否根据文件大小或持续时间确定进度条的尺寸?
那么我的选择是什么?我确信这是一个以前解决过的问题。范围响应可以与分块编码结合使用吗?
ruby-on-rails - Rails ActiveStorage 音频内容范围
它最初是 ActiveStorage 的一个简单用途,只需以 mp3 格式存储一些音频文件(轻松完成)并将其显示在网站上:
<%= audio_tag url_for(recording.audio_file), controls: true, preload: "none" %>
我在 Chrome 和 Firefox 上进行了测试,它可以正常工作,我可以随意播放音频,但是当我在 Safari 上测试它时,我遇到了 Safari 假设服务器支持 Content-Range 所以 Safari 认为它的问题是一个 Live Stream 并且 html5 元素只能播放一次。
所以我一直在互联网上搜索如何解决这个问题,我看到的答案指向:
- 网络服务器不支持它,但我使用的是 Apache 2.4,从 2.2 开始,它默认支持 Content-Range。
- Safari是垃圾,对我没有帮助
- 你应该在 Rails 上实现它,是的,这可能是一个解决方案,但我检查了 ActiveStorage 的代码(https://github.com/rails/rails/blob/master/activestorage/lib/active_storage/service/disk_service.rb# L41)但我必须更改它(我发现这个答案rails media file stream accept byte range request through send_data or send_file method)这似乎很有帮助,但似乎它应该更容易并且不应该要求我更改ActiveStorage 的实现。
- 所以最后一种可能性是我不理解一切如何编织在一起的概念,答案可能简单易行,这就是为什么互联网上没有信息,因为它很明显,但我真的不知道出来。
任何人都知道如何使用 ActiveStorage 存储和提供可以使用适用于 Chrome、FireFox 和 Safari 的 html5 音频标签呈现的音频。
谢谢你的帮助。
php - Chrome 问题 - 视频流和会话冲突
我在 javascript 和 PHP 中实现视频时遇到问题。
索引.php
视频.php
视频.html
一切正常,但由于某种原因我不知道,当我开始播放视频然后单击页面上的链接或使用浏览器的后退按钮时,浏览器会冻结并等待一段时间(变量),然后再点击链接。
分析器指示请求的页面更改处于挂起状态。
如果我将视频光标放在更远的地方,浏览器会立即解锁并跟随我单击的链接。
最后,如果我重新加载该页面,问题就不会再出现了。似乎 chrome 正在等待某些东西,但由于我的缓存被禁用,它没有被缓存。
这只发生在 chrome 桌面上,所有其他浏览器都能正确完成这项工作。
** 编辑 **
我找到了问题的根源。
要播放我的视频,我会浏览我的主文件index.php
,该文件用作我的路由器,我在其中初始化会话session_start()
。
播放视频时,我单击浏览器的链接或后退按钮,我会返回index.php
. 这是 chrome 在 session_start() 期间卡住的时候
只要视频正在播放,会话似乎就存在冲突。
javascript - Content-Range 在 Safari 中工作,但在 Chrome 中不工作
我正在从带有Content-Range
标头的 Node.js Express 服务器流式传输音频文件,并且没有缓存标头。这在最新的 Safari 中可以正常工作,但在 Chrome 中却不行。
当使用 流式传输完整的音频文件时HTTP 200
,我的标题是
它适用于 Chrome 和 Safari<audio>
标签。
当使用HTTP 206流式传输部分内容时,标头是
这导致or标记所在的Chrome页面出现错误。<audio>
<video>
即使是 Chrome 在浏览器中使用流式 URL 时创建的嵌入式媒体标签也无法正常工作,并导致了这种情况
createReadStream
音频文件通过 Node.js API读取本地文件并创建文件读取流:
我在这里发布了服务器的代码。
[更新]
事实证明,Chrome 并没有对请求/响应更加Range
严格Content-Range
。所以任何Content-Range
响应都必须有一个Range
先前的请求。典型的情况是将播放器栏擦洗到第二个 S。api 将发送"Range"
请求,服务器将响应“Content-Range”标头。就我而言,我是通过Content-Range
没有"Range"
. Safari 之所以有效,是因为它的street-html
抱怨更多,即它并不严格要求在响应"Range"
之前提出请求"Content-Range"
。所以,我从我的回复中删除了“Content-Range”标题,但它不起作用。故事的结局 (!)。
为了跟进这个问题,我也在 Chromium net-dev 论坛的Chrome bad Range 标头中发布: Range: bytes=0-
google-chrome - 如何防止浏览器按范围从内存缓存中加载js?
我昨晚在 Chrome 中打开了我的网站,然后关闭了该选项卡,但没有关闭浏览器。今天我无法在新选项卡中打开我的网站,因为 jQuery(不使用 CDN)遇到语法错误:输入意外结束。
无论我刷新多少次,我的网站总是会出现此错误。但是硬刷新后错误没有再次发生。
这个问题在最近几个月发生了很多次。
我检查了 Chrome devtool,它说我的 jquery.min.js 是从内存缓存中加载的。而且它不是一个完整的文件,只包含 jquery 库的一部分。这就是我收到语法错误的原因。
我从谷歌做了一些研究:
内存缓存的生命周期附加到渲染进程的生命周期,大致对应一个选项卡。
因此,如果我创建一个新选项卡来访问我的站点,按理说,jQuery 不应该从内存缓存中加载。
如果我在新选项卡中访问站点,我希望浏览器不会再次从内存中加载我的文件。
我能做些什么来找到问题的根源并解决它吗?
编辑(2019-05-13):
今天再次遇到这个错误,但幸运的是,我发现新点似乎对这个问题有帮助。
请参阅状态代码是 206 Partial Content(来自内存缓存)。
而且我不知道为什么我的请求标头包含“范围”字段。
regex - 如何使用正则表达式防止特定字符多次出现
我有一个使用编号捕获组的正则表达式:
\\b${JOB_SEARCH_RESULTS_RANGE_KEY}\\s+((\\d+)-(\\d+)|\\*)/(\\d+|\\*)
这将解析一个 Content-Header:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range
目前,这个正则表达式将允许*
在范围或大小的任一侧。我想抓住*
两边是否有一个。
我怎样才能做到这一点?
我对正则表达式很陌生。任何帮助是极大的赞赏。
javascript - Microsoft Graph 的 createUploadSession、Content-Range Header 错误
我正在尝试将 Microsoft Graph API 的createUploadSession
端点与 JavaScript SDK 一起使用,并尝试使用刚刚超过 3MB 的小文件来测试上传。每当发送PUT
请求时,我都会收到以下错误响应:
我正在尝试一次发送整个文件,因此请求如下所示:
这里有什么我想念的吗?如果我理解正确,给出完整的范围应该传递整个文件。
rest - 如何将内容范围标头包含到来自逻辑应用程序的 http 请求中?
我有一个系统 url 端点,它要求用户在标题部分发送一些强制性信息,其中之一是 Content-range,格式如下:
“内容范围”:“字节 0-4/5”;(开始范围-结束范围/总大小)
我正在尝试使用 HTTP 操作从逻辑应用程序调用 url。但是,这会返回 500 内部服务器错误。在进一步调试时,我了解到 Microsoft 逻辑应用从生成的请求消息中删除了“Content-Range”标头,而没有显示任何警告或错误。是否有任何解决方法可以避免标题被忽略?谢谢。
python-requests - Python - 请求 HTTP 内容范围不起作用
谁能告诉我为什么我无法使用 content-range 标头获取内容范围,而是在给定的 url 中获取全部内容。