在博客文章中,我使用以下PHP来设置响应的内容类型:
header('content-type: application/json; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)
我刚刚对该帖子发表评论说content-type需要大写,Content-type.它是否正确?它似乎适用于所有小写的我,我假设HTTP标题不区分大小写.或者它只是工作,因为浏览器很好?
我有一个 Node.js 端点,当使用以下命令访问时,它会正确触发任意大的文件下载:
response.setHeader('Content-disposition', 'attachment; filename=' + fileName);
response.set('Content-Type', 'text/csv');
response.status(200);
result.pipe(response);
Run Code Online (Sandbox Code Playgroud)
其中result是变换流,response是Express 对象。
当直接访问 Chrome、Firefox、Internet Explorer 等中的端点时,此方法工作正常。问题是在启用基于令牌的身份验证时尝试访问端点而产生的。
从用户的角度来看,当他们单击按钮时,就会下载文件。
如何使按钮使用请求标头中的正确身份验证令牌命中此端点并导致下载文件?
当用户单击该按钮时,它会触发由 redux-api-middleware 处理的操作,该操作GET向端点发出请求(身份验证令牌自动包含在请求中)。该中间件将响应保存在一个变量中,该变量由 React 组件获取。在此 React 组件中,如果正在使用的浏览器(即 Chrome 和 Opera)支持流,response.body则会存在,因此您可以执行如下操作。
if (response.body) {
const csvReader = response.body.getReader();
const textDecoder = new TextDecoder();
const processCsvRow = (csvRow) => {
if (csvRow.done) {
console.log('Finished downloading file.');
return Promise.resolve();
}
// Write to new file for user to download …Run Code Online (Sandbox Code Playgroud)我正在对我的计算机(192.168.1.132)上的API发出请求,并通过电话(在同一网络中)进行本地响应:
fetch('http://192.168.1.132:8000/test', {
method: 'GET',
headers: { 'Authorization': 'Bearer 4uFPmkP5326DXcRuHDKjRRrmhdeIBJ'},
credentials: 'same-origin'
})
.then((response) => response.json())
.then((responseJson) => {
console.log('RESPONSE: ' + JSON.stringify(responseJson))
})
Run Code Online (Sandbox Code Playgroud)
但是我正在嗅探该请求,并且它没有Authorization标头(我输入的其他任何标头都会出现,但没有Authorization)。在Xcode中,我启用了“ AllowArbitraryLoads”。因此,我的API返回401(未授权),因为显然没有授权标头。为什么它不包含在我的请求中?
http-headers ×2
express ×1
http ×1
ios ×1
jwt ×1
node.js ×1
react-native ×1
react-redux ×1
xcode ×1