
本文旨在解决JavaScript在浏览器环境中跨域请求第三方网站,特别是当目标网站返回text/html类型数据时遇到的CORB(Cross-Origin Read Blocking)问题。文章将解释CORB产生的原因,并提供一种通过服务器端代理解决该问题的方案,避免直接在客户端暴露敏感信息和绕过浏览器的安全限制。
在Web开发中,由于浏览器的同源策略,JavaScript代码通常无法直接访问来自不同源(协议、域名或端口不同)的资源。CORS(Cross-Origin Resource Sharing)是一种机制,允许服务器声明哪些来源的网页可以访问其资源。如果服务器没有明确允许跨域访问,浏览器会阻止客户端JavaScript代码读取响应内容。
CORB(Cross-Origin Read Blocking)是浏览器的一种安全机制,用于阻止跨域读取某些类型的响应,例如text/html,以防止潜在的安全漏洞,例如跨站脚本包含(XSSI)攻击。 当浏览器检测到跨域请求返回text/html内容时,并且服务器没有设置适当的CORS头,CORB就会阻止JavaScript访问响应体。
直接在JavaScript中使用$.ajax或其他方式请求https://pubmed.ncbi.nlm.nih.gov/?term=hello这类返回text/html的URL,并且没有正确配置CORS的服务器,会导致以下问题:
立即学习“Java免费学习笔记(深入)”;
解决此类跨域问题的最佳实践是使用服务器端代理。这意味着你的JavaScript代码向你的服务器发送请求,然后你的服务器再代表客户端向目标服务器发送请求,并将响应转发回客户端。 这样可以绕过浏览器的同源策略,因为所有的跨域请求都发生在服务器端。
步骤如下:
客户端 (JavaScript):
function fetchData() {
fetch('/api/pubmed?term=hello') // 你的服务器端代理地址
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok ' + response.status);
}
return response.text(); // 获取文本数据
})
.then(data => {
console.log(data); // 处理从服务器返回的数据
})
.catch(error => {
console.error('There has been a problem with your fetch operation:', error);
});
}
fetchData();服务器端 (Node.js 示例):
const express = require('express');
const axios = require('axios');
const cors = require('cors'); // 引入 cors 中间件
const app = express();
const port = 3000;
app.use(cors()); // 启用 CORS
app.get('/api/pubmed', async (req, res) => {
const searchTerm = req.query.term;
const targetUrl = `https://pubmed.ncbi.nlm.nih.gov/?term=${searchTerm}`;
try {
const response = await axios.get(targetUrl);
res.send(response.data); // 将目标网站的响应返回给客户端
} catch (error) {
console.error(error);
res.status(500).send('Internal Server Error');
}
});
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`);
});代码解释:
注意事项:
直接在客户端JavaScript中跨域请求text/html类型的资源通常会受到浏览器的安全限制。 使用服务器端代理是一种安全且可靠的解决方案。 通过在服务器端发送请求并将响应转发回客户端,可以绕过浏览器的同源策略和CORB限制。 在实际应用中,请务必注意安全性、CORS配置、错误处理和性能优化。
以上就是解决跨域请求text/html响应:JavaScript访问第三方网站的正确姿势的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号