- AJAX 教程
- AJAX - 首页
- AJAX - 什么是 AJAX?
- AJAX - 历史
- AJAX - 动态网站与静态网站
- AJAX - 技术
- AJAX - 操作
- AJAX - XMLHttpRequest
- AJAX - 发送请求
- AJAX - 请求类型
- AJAX - 处理响应
- AJAX - 处理二进制数据
- AJAX - 提交表单
- AJAX - 文件上传
- AJAX - FormData 对象
- AJAX - 发送 POST 请求
- AJAX - 发送 PUT 请求
- AJAX - 发送 JSON 数据
- AJAX - 发送数据对象
- AJAX - 监控进度
- AJAX - 状态码
- AJAX - 应用
- AJAX - 浏览器兼容性
- AJAX - 示例
- AJAX - 浏览器支持
- AJAX - XMLHttpRequest
- AJAX - 数据库操作
- AJAX - 安全性
- AJAX - 问题
- Fetch API 基础
- Fetch API - 基础
- Fetch API 与 XMLHttpRequest
- Fetch API - 浏览器兼容性
- Fetch API - 头部信息
- Fetch API - 请求
- Fetch API - 响应
- Fetch API - 主体数据
- Fetch API - 凭据
- Fetch API - 发送 GET 请求
- Fetch API - 发送 POST 请求
- Fetch API - 发送 PUT 请求
- Fetch API - 发送 JSON 数据
- Fetch API - 发送数据对象
- Fetch API - 自定义请求对象
- Fetch API - 上传文件
- Fetch API - 处理二进制数据
- Fetch API - 状态码
- 流 API 基础
- 流 API - 基础
- 流 API - 可读流
- 流 API - 可写流
- 流 API - 变换流
- 流 API - 请求对象
- 流 API - 响应主体
- 流 API - 错误处理
- AJAX 有用资源
- AJAX - 快速指南
- AJAX - 有用资源
- AJAX - 讨论
流 API - 请求对象
请求对象用于从服务器获取资源。请求对象是使用 Request 接口提供的 Resquest() 构造函数创建的。因此,当创建新的 Request 对象时,我们可以将 ReadableStream 传递给 Request 对象的主体,此类请求称为流式请求。然后将此请求对象传递给 fetch() 函数以获取资源。
语法
const myobject = new Request(URL, { method: 'POST', body: Stream, headers: {'Content-Type'}, duplex: 'half', });
这里 Request() 构造函数包含以下参数:
URL - 资源的地址。
method - 它表示 HTTP 请求方法,例如 GET、POST 等。
body - 包含 ReadableStream 对象。
headers - 包含主体适用的头部信息。
duplex - 设置为 half 以创建双工流。
示例
在下面的程序中,我们创建一个流式请求。为此,我们首先使用 ReadableStream() 构造函数以及实现 ReadableStream 逻辑和其他操作的 start() 函数创建一个可读流。然后,我们使用 Request() 构造函数以及以下选项创建一个请求对象:method 选项包含发送请求的 POST 请求,body 选项包含流,headers 选项包含相应的头部信息,duplex 选项设置为 half 以使其成为双工流。创建请求对象后,我们现在将该对象传递给 fetch() 函数以发出请求,此函数使用 then() 处理响应,并使用 catch() 函数处理错误(如果发生)。在这里,您可以使用有效的 API/URL 替换 https://exampleApi.com/,该 API/URL 以块的形式发送/接收数据。
<script> // Create a readable stream using the ReadableStream constructor() const readStream = new ReadableStream({ start(controller) { // Here implement your ReadableStream // Also with the help of controller, you can enqueue data and // signal the end of the stream }, }); // Create a request objecct using Request() constructor const request = new Request('https://exampleApi.com/', { // Set the method method: 'POST', // Passing the stream to the body of the request body: stream, // Setting suitable header headers: {'Content-Type': 'application/octet-stream'}, duplex: 'half' }); // After creating a request object pass the object // to fetch() function make a request or perform operations fetch(request) .then(response => { // Handling the response }) .catch(error => { // Handling any errors if occur }); </script>
限制
流式请求是一项新功能,因此它有一些限制,它们是:
半双工 - 要执行流式请求,我们必须将 duplex 选项设置为 half。如果您未在流式请求中设置此选项,则会收到错误。此选项表示请求主体是双工流,其中双工流是同时接收数据(可写)和发送数据(可读)的流。
需要 CORS 并触发预检请求 - 如我们所知,流式请求的请求主体包含一个流,但没有“Content-Length”头部信息。因此,对于此类请求,需要 CORS,并且它们始终会触发预检请求。此外,不允许使用 no-cors 流式请求。
在 HTTP/1.x 上不起作用 - 如果连接是 HTTP/1.x,则根据 HTTP/1.x 规则,它将拒绝 fetch。根据 HTTP/1.x 规则,请求和响应主体需要发送 Content-Length 头部信息。以便另一方可以记录已接收的数据量或更改格式以使用分块编码。分块编码很常见,但对于请求来说,它非常罕见。
服务器端不兼容性 - 一些服务器不支持流式请求。因此,始终仅使用支持流式请求的服务器,例如 NodeJS 等。
结论
这就是我们如何为流创建 Request 对象,或者我们可以说这是我们如何使用 fetch() 函数创建流式请求。流式请求对于发送大文件、实时数据处理、媒体流、连续数据馈送等很有用。现在,在下一篇文章中,我们将学习 Stream API 中的响应主体。