我想提供一些基于普通浏览器GET请求的HTML,但是如果user-agent请求头包含来自js变量myString
的字符串,我想什么也不做响应(就好像域没有注册一样)。
我想这意味着我的服务器不能用状态100响应。但是这是怎么做到的呢?
我试着只添加一个return语句,这只是让请求挂起。我还试着添加res.status(404).end()
和res.destroy()
,但浏览器中的结果与根本没有响应不同。
我怎样才能“不响应"浏览器对特定用户代理的请求,但在其他方面正常响应?
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
const userAgent = req.headers['user-agent']
const myString = 'firefox'
if (userAgent.toLowerCase().includes(myString)) {
res.destroy()
return
}
res.setHeader("Content-Type", "text/html")
res.send('<html><body>hello</body></html>')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
我期望在浏览器中根本没有可见的结果,就好像域没有注册一样。
我问这个问题的原因是,考虑到iOS Safari浏览器在动态视口方面存在太多问题,以及苹果糟糕的实现所带来的所有困难,我打算不回应iPhone的请求。
成功标准:浏览器中的结果必须等于
if (userAgent.toLowerCase().includes(myString)) {
res.redirect('https:/www.some-unregistered-url.com')
}
但实际的url保持不变。
3条答案
按热度按时间b1zrtrql1#
这样试试看:res.set(“连接”、“关闭”);或相对连接销毁();
但是如果你真的不想允许Firefox.你应该发送一个StatusCode 40 x. Badrequest 400或403 Forbidden,并带有这样的消息. Client not allow.
tvokkenx2#
要想完全不响应请求,可以不调用res.send()或任何其他发送响应的方法。
实现这一点的一种方法是在if块后面添加一个return语句,检查用户代理字符串:
这将导致服务器根本不为用户代理字符串包含myString的请求发送任何响应。请注意,在这种情况下,即使不发送响应正文,客户端仍将收到状态代码200(OK)。
如果要返回特定的状态代码,如404(未找到),可以调用res.sendStatus(404)或res.status(404).send()来发送不带响应正文的404响应。
需要注意的是,返回404状态码或任何其他非成功状态码都不会阻止客户端接收响应,它只会表明请求的资源没有找到。
如果你想完全阻止客户端接收响应,你可以简单地不调用res对象上的任何方法,这将导致服务器根本不发送任何响应。
rn0zuynd3#
返回一个空的html文档怎么样?
你也可以试试
您还应该检查此服务器端浏览器检测
server-side browser detection? node.js