Я пишу сервер в NodeJS и Koa, который перенаправляет каждый запрос на другой сервер с запросом HEAD, и если ответ в порядке, он продолжает обрабатывать запрос.Промежуточное программное обеспечение, которое делает это, выглядит следующим образом:
//basicAuth.js
import axios from 'axios'
export default async function(ctx,next) {
console.log(ctx.headers)
let result = await axios({
url: process.env.USER_SERVICE_LOGIN_PATH,
baseURL: process.env.USER_SERVICE_BASE_URL,
method: 'HEAD',
headers: ctx.headers,
timeout: 5000
})
await next()
}
Это используется моим сервером в качестве промежуточного программного обеспечения:
app.use(basicAuth)
Другая служба проверяет заголовки и отвечает 200 или 401.
Это прекрасно работает, когда я получаю запрос GET на мой сервер.Но когда я получаю запрос POST, другой сервер, к которому я обращаюсь при вызове axios, выдает ошибку ERCONNRESET, и время соединения истекает.Посмотрите на мой код для этого маршрута и некоторые другие:
router.get('/', async ctx => {
ctx.set('Allow','GET, POST')
try {
if (ctx.get('error')) throw new Error(ctx.get('error'))
let res = await db.getCourses({...ctx.query})
ctx.status = status.OK
ctx.body = res
}
catch(err) {
ctx.status = status.BAD_REQUEST
ctx.body = {status: status.BAD_REQUEST, message: err.message}
}
})
router.post('/create', async ctx => {
ctx.set('Allow','POST')
try {
if (ctx.get('error')) throw new Error(ctx.get('error'))
let res = await db.postCourse({data: ctx.request.body})
ctx.status = status.OK
ctx.body = res
}
catch(err) {
ctx.status = status.BAD_REQUEST
ctx.body = {status: status.BAD_REQUEST, message: err.message}
}
})
Это очень странное поведение, и я могу только догадываться, почему это происходит, потому что есть какой-то заголовок или что-то, что нарушает запрос.Я зарегистрировал заголовки, переданные в вызове axios, в результате запроса POST /create.
{ 'content-type': 'application/json',
'cache-control': 'no-cache',
'postman-token': '561fca27-f23a-4ae8-ba05-5fbeef0f0d20',
'user-agent': 'PostmanRuntime/7.4.0',
accept: '*/*',
host: 'localhost:3031',
'accept-encoding': 'gzip, deflate',
'content-length': '122',
connection: 'keep-alive' }
Любая идея, почему мой вызов axios не проходит, когда я получаю доступ к POST / create.Единственный вывод, который я получаю с другого сервера, это ERRCONRESET, маршрут, к которому я пытаюсь получить доступ, даже не достигнут, я тестировал с console.logs.