- AJAX 教程
- AJAX - 教程
- AJAX - 什么是 AJAX?
- Ajax - 历史
- Ajax - 动态站点与静态站点
- AJAX - 技术
- AJAX - action(操作)
- AJAX - XMLHttpRequest
- AJAX - 发送请求
- AJAX - 请求类型
- AJAX - 处理响应
- AJAX - 处理二进制数据
- AJAX - 提交表单
- AJAX - 文件上传
- AJAX - FormData 对象
- AJAX - 发送 POST 请求
- AJAX - 发送 PUT 请求
- AJAX - 发送 JSON 数据
- AJAX - 发送数据对象
- AJAX - 监控进度
- AJAX - 状态代码
- AJAX - 应用程序
- AJAX - 浏览器兼容性
- AJAX - 浏览器支持
- AJAX - 数据库操作
- AJAX - 安全性
- AJAX - 常见问题
- Fetch API 基础知识
- Fetch API - 基础知识
- Fetch API 与 XMLHttpRequest
- Fetch API - 浏览器兼容性
- Fetch API - headers
- 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 - 状态代码
- Stream API 基础知识
- Stream API - 基础
- Stream API - 可读流
- Stream API - 可写流
- Stream API - 转换流
- stream API - 请求对象
- stream API - 响应正文
- Stream API - 错误处理
stream API - 请求对象
请求对象用于从服务器获取资源。请求对象是使用 Resquest 接口提供的 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 规则,它将拒绝获取。根据 HTTP/1.x 规则,请求和响应正文需要发送 Content-Length 标头。这样另一方就可以记录收到了多少数据,或者可以更改格式以使用分块编码。分块编码很常见,但对于请求来说,这种情况非常罕见。
- 服务器端不兼容 − 某些服务器不支持流式请求。因此,请始终只使用那些支持流式请求的服务器,如 NodeJS 等。
结论
这就是我们为流创建 Request 对象的方法,或者我们可以说这就是我们使用 fetch() 函数创建流请求的方法。流式处理请求可用于发送大型文件、实时数据处理、媒体流式处理、连续数据馈送等。现在在下一篇文章中,我们将了解 Stream API 中的响应正文。