这是一个简单的演示,说明了我的问题:https://funnyballoon.github.io/。
我正在构建一个网站,其数据基于JSON对象(Loading random objects from a huge (>200MB) array file without loading the entire array)数组中随机选择的对象,我将该数组存储为Github上托管的静态文件。我的网站使用Angular。现在我尝试使用HTTP范围请求(https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests)来实现这种随机选择。这是我使用的方法:
getPartialText(){
let path:string='/mock/mockData.json';
let headers = new HttpHeaders().set('Range', 'bytes=0-123').set('Access-Control-Allow-Origin','*');
this.http.get(path,{headers:headers, responseType: 'text'}).subscribe((data:any)=>{
this.secondPartialText=data;
});
}
请注意,我将字节设置为'0-123',这非常有效,因此(可能)不是CORS问题。但是,当我将字节范围的开头设置为0以外的任何数字时,例如'bytes = 1-123',我收到此消息的错误:
(未知网址)的Http失败响应:0未知错误
这非常令人困惑。以下是我网站的简单演示:https://funnyballoon.github.io/。如您所见,如果您单击第一个按钮,一切正常,而当您单击第二个按钮时,日志中会出现错误。
这是我的代码:
app.component.ts
import { Component } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
public firstPartialText;
public secondPartialText;
constructor(public http: HttpClient){}
getFirstPartialText(){
let path:string='/mock/mockData.json';
let headers = new HttpHeaders().set('Range', 'bytes=0-123').set('Access-Control-Allow-Origin','*');
this.http.get(path,{headers:headers,responseType: 'text'}).subscribe((data:any)=>{
this.firstPartialText=data;
});}
getSecondPartialText(){
let path:string='/mock/mockData.json';
let headers = new HttpHeaders().set('Range', 'bytes=1-123').set('Access-Control-Allow-Origin','*');
this.http.get(path,{headers:headers, responseType: 'text'}).subscribe((data:any)=>{
this.secondPartialText=data;
});}
}
app.component.html
<div> <button (click)="getFirstPartialText()">Get First</button>
{{firstPartialText}}</div>
<div> <button (click)="getSecondPartialText()">Get Second</button>
{{secondPartialText}}</div>
如果有人能指出这里出了什么问题我很感激。谢谢!