用以下代码,在webview调试器能看到文件的response,content-type用的也是axios的responseHeader,content-length也有值,但是放在responseWeb中后content-length就为0了,还有Content-Type会被自动加上chatset=utf-8,是什么原因呢?主要是没办法把加载下来的html渲染在页面上
onInterceptRequest = (event: IonInterceptRequest) => {
const url = event.request.getRequestUrl()
const _headers = event.request.getRequestHeader()
console.info('getRequestHeader: ',JSON.stringify(_headers))
const responseWeb = new WebResourceResponse();
const headerValue: string | undefined = _headers.find(item => item.headerKey === 'User-Agent')?.headerValue;
axios.get(url, {
headers: {
os_platform: 'HARMONY_NEXT_OS',
'User-Agent': headerValue,
'userAgent': headerValue
}
}).then((resp: AxiosResponse) => {
const html: string = resp.data
try {
const harmonyHeaders = this.transferResponseHeaderStruct(resp.headers);
console.info('new headers', JSON.stringify(harmonyHeaders))
responseWeb.setResponseHeader(harmonyHeaders)
responseWeb.setResponseData(html)
responseWeb.setResponseEncoding('utf-8');
responseWeb.setResponseMimeType(resp.headers['content-type'].replace(/[;]?\s?charset=utf-8/, ''));
responseWeb.setResponseCode(200);
responseWeb.setReasonMessage('OK');
responseWeb.setResponseIsReady(true);
} catch(e) {
console.error('error ?', e.message)
}
})
responseWeb.setResponseIsReady(false);
return responseWeb;
}
"content-length 总是 0" 通常出现在 HTTP 请求或响应中,表示请求或响应的消息体内容长度为 0 字节。
可能原因及解决方法:
客户端问题:
客户端未正确设置 Content-Length 头:确保在发送请求时,如果你知道消息体长度,需要在请求头中正确设置 Content-Length。
客户端在发送数据前计算了 Content-Length,但实际发送的数据长度与计算的不匹配。
服务器问题:
服务器代码有误,如在处理请求体前就已经向客户端发送了响应。
服务器在读取请求体时出现了问题,如流的读取方式不正确,导致没有正确读取到数据。
解决方法:
对于客户端,检查代码确保在发送请求前计算并设置了正确的 Content-Length。
对于服务器端,检查代码确保在发送响应头之前没有向输出流中写入任何数据,并且正确读取了请求体中的数据。