programing

오류: 요청 엔티티가 너무 큽니다.

nicescript 2022. 9. 28. 21:58
반응형

오류: 요청 엔티티가 너무 큽니다.

express에서 다음 오류가 발생하였습니다.

Error: request entity too large
    at module.exports (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/node_modules/raw-body/index.js:16:15)
    at json (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/json.js:60:5)
    at Object.bodyParser [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:53:5)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.cookieParser [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js:60:5)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.logger (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/logger.js:158:5)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.staticMiddleware [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/static.js:55:61)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
TypeError: /Users/michaeljames/Documents/Projects/Proj/mean/app/views/includes/foot.jade:31
    29| script(type="text/javascript", src="/js/socketio/connect.js")
    30| 
  > 31| if (req.host='localhost')
    32|     //Livereload script rendered 
    33|     script(type='text/javascript', src='http://localhost:35729/livereload.js')  
    34| 

Cannot set property 'host' of undefined
    at eval (eval at <anonymous> (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:152:8), <anonymous>:273:15)
    at /Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:153:35
    at Object.exports.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:197:10)
    at Object.exports.renderFile (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:233:18)
    at View.exports.renderFile [as engine] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:218:21)
    at View.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/view.js:76:8)
    at Function.app.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/application.js:504:10)
    at ServerResponse.res.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/response.js:801:7)
    at Object.handle (/Users/michaeljames/Documents/Projects/Proj/mean/config/express.js:82:29)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:188:17)

POST /api/0.1/people 500 618ms

나는 meanstack을 사용하고 있다.express.js에는 다음과 같은 사용방법이 있습니다.

//Set Request Size Limit
app.use(express.limit(100000000));

fiddler 내에서 1078702의 값을 가진 content-length 헤더를 볼 수 있습니다.

이건 옥텟으로 1.0787메가바이트인 것 같아요

express가 이전 투고하고 있던 json 어레이를 왜 평균 스택프로젝트 구조를 사용하지 않은 다른 express프로젝트에 투고할 수 없는지 모르겠습니다.

최근에도 같은 에러가 발생했는데, 지금까지 발견된 해결 방법이 모두 작동하지 않았습니다.

좀 파헤친 후에, 그 설정을 발견했습니다.app.use(express.bodyParser({limit: '50mb'}));제한을 올바르게 설정했습니다.

를 추가할 때console.log('Limit file size: '+limit);node_modules/express/node_modules/connect/lib/middleware/json.js:46노드를 재부팅하면 콘솔에 다음 출력이 표시됩니다.

Limit file size: 1048576
connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
Limit file size: 52428800
Express server listening on port 3002

처음에 로딩할 때 확인할 수 있습니다.connect모듈, 제한은 1MB(1048576바이트)로 설정됩니다.그리고 제가 한도를 설정했을 때console.log다시 그리고 이 시간에는 한계가 있52428800(50mb)호출됩니다.하지만, 저는 여전히 a를 얻는다413 Request entity too large.

그리고 나서 나는 덧붙였다console.log('Limit file size: '+limit);node_modules/express/node_modules/connect/node_modules/raw-body/index.js:10(에러 출력 전) 큰 요구를 가진 루트를 호출했을 때 콘솔에 다른 회선이 표시되었습니다.

Limit file size: 1048576

이 어찌 되었든, somewhere,을 의미한다.connect를 다시 설정합니다 제한 매개 변수가 명시된를 무시한다.나는 지정하여 노력했다bodyParser길 정의 개별적으로에서 매개 변수지만, 운도 아니다.

내가 어떤 적절한 방법이 영구적으로 설정하기를 찾지 않는다면, 해당 모듈에 직접"패치" 수 있다.만약 당신이 익스프레스 3.4.4을 사용하는 경우의 라인 46세에 이 추가하다.node_modules/express/node_modules/connect/lib/middleware/json.js:

limit = 52428800; // for 50mb, this corresponds to the size in bytes

만약 당신이 익스프레스의 동일한 버전을 실행하지 않는번 노선과는 다르다.부디 이것은...않 좋은 연습 가서 당신의 모듈이 그것을 덧씌워 지게 된다는 것에 유의한다.

그래서 이 일시적인 이제 해결책을 시작했지만(또는 모듈을 사건에 있는 모듈 문제를 해결)너는 그에 따라서 당신의 코드 업데이트되어야 한다 하루 빨리 해결책 발견된다 일한다.

나는 이 문제에 대해 그들의 GitHub에 대한 이슈를 열고 있다.

[편집-해결책을 찾아냈다]

몇 가지 조사와 테스트를 거쳐 디버깅을 할 때app.use(express.bodyParser({limit: '50mb'}));, 그 후 app.use(express.json());. Express는 스크립트를 실행할 때 처음 접한 파서가 1mb이기 때문에 글로벌 제한을 1mb로 설정합니다.express.json()·이동bodyParser그 위는 효과가 있었다.

해도, 렇긴 that that that that that that 。bodyParser()메서드는 Connect 3.0에서는 사용되지 않으므로 사용하지 마십시오.. '파서하다'와같이요.

app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));

멀티파트(파일 업로드용)가 필요한 경우 이 게시물을 참조하십시오.

[2차 편집]

4에서는 4가 4에서는express.json() ★★★★★★★★★★★★★★★★★」express.urlencoded()body-parser 모듈이 필요하며 body-parser 모듈을 사용해야 합니다.json() ★★★★★★★★★★★★★★★★★」urlencoded()다음과 같이 합니다.

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

경우,extended이 되어 있지 않습니다.bodyParser.urlencoded() 「경고」)가body-parser deprecated undefined extended: provide extended option이는 다음 버전에서는 이 옵션이 필수이며 더 이상 옵션이 아니기 때문입니다.자세한 내용은extended옵션에서는, 의 readme 를 참조할 수 있습니다.body-parser.

[세 번째 편집]

Express v4.16.0 이후에서는 (팁의 @GBMan 덕분에) 초기 방법으로 돌아갈 수 있을 것 같습니다.

app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));

내 경우 다음 행을 추가하는 것만으로는 충분하지 않았습니다.

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

설명서에 나와 있는 대로 urlencoded 함수에 parameter Limit 옵션을 추가하려고 했는데 오류가 나타나지 않습니다.

parameterLimit 옵션은 URL 인코딩 데이터에서 허용되는 최대 매개 변수 수를 제어합니다.요구에 이 값보다 많은 파라미터가 포함되어 있는 경우 413이 클라이언트에 반환됩니다.기본값은 1000 입니다.

다음 코드를 사용하여 시도합니다.

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}));

누군가가 모든 답변을 시도했지만 아직 성공하지 못하고 NGINX를 사용하여 사이트를 호스팅하는 경우 이 행을 /etc/nginx/sites-available에 추가합니다.

client_max_body_size 100M; #100mb

이것은 글로벌 사이즈의 명시적인 제한이 아니라 connect.json 미들웨어의 제한이라고 생각합니다.이 값은 디폴트로 1MB입니다.express.bodyParser() '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아limit★★★★★★ 。

시험:

app.post('/api/0.1/people', express.bodyParser({limit: '5mb'}), yourHandler);

express ~ 4.16.0의 경우 express.json(제한 포함)이 직접 작동합니다.

app.use(express.json({limit: '50mb'}));

★★★★★★★★★★★★★★...parameterLimit:50000

app.use( bodyParser.json({limit: '50mb'}) );
app.use(bodyParser.urlencoded({
  limit: '50mb',
  extended: true,
  parameterLimit:50000
}));

다음은 나에게 효과가 있었다...그냥 사용하다

app.use(bodyParser({limit: '50mb'}));

바로 그겁니다.

아무리 노력해도 소용없었다.우리가 다음과 같이 사용하지만,

app.use(bodyParser());
app.use(bodyParser({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb'}));

번째만app.use(bodyParser());하나는 정의되고 나머지 두 행은 무시됩니다.

참조: https://github.com/expressjs/body-parser/issues/176 > > "2016년 6월 17일에 관한 코멘트"를 참조해 주세요.

2016년, 바디파서의 '한계'에 더해 '유형'을 설명할 때까지 위의 어느 것도 나에게 효과가 없었습니다. 예:

  var app = express();
  var jsonParser       = bodyParser.json({limit:1024*1024*20, type:'application/json'});
  var urlencodedParser = bodyParser.urlencoded({ extended:true,limit:1024*1024*20,type:'application/x-www-form-urlencoded' })

  app.use(jsonParser);
  app.use(urlencodedParser);

제 경우 Nginx 설정에 문제가 있었습니다.이 문제를 해결하려면 파일을 편집해야 합니다./etc/nginx/nginx.conf을 사용하다

client_max_body_size 5M;

Nginx를 재시작하면 문제가 해결됩니다.

sudo systemctl restart nginx

아래 설정이 효과가 있었습니다.

Express 4.16.1

app.use(bodyParser.json({ limit: '50mb' }))
app.use(bodyParser.urlencoded({
  limit: '50mb',
  extended: false,
}))

엔긴스

client_max_body_size 50m;
client_body_temp_path /data/temp;

몇 번이고 도전한 끝에 해결책을 찾았다.

이 대사를 코멘트했습니다.

app.use(bodyParser.json());

그리고 저는

app.use(bodyParser.json({limit: '50mb'}))

그럼 된다

약간 다른 접근법 - 페이로드가 너무 큽니다.

지금까지 도움이 된 답변은 모두 페이로드 제한을 늘리는 것에 관한 것입니다.그러나 페이로드가 실제로 너무 크지만 정당한 이유가 없는 경우도 있을 수 있습니다.그럴 만한 타당한 이유가 없다면, 애초에 왜 이렇게 부었는지 알아보는 것을 고려해보세요.

델만의 경험

예를 들어, 이 경우 Angular 앱은 탐욕스럽게 전체 개체를 페이로드에 전송했습니다.비대하고 장황한 속성을 1개 삭제하면 payload 크기가 100배 감소합니다.이것에 의해, 퍼포먼스가 큰폭으로 향상해, 413 에러가 해결되었습니다.

오래된 작은 포스트지만 나도 같은 문제가 있었다.

express 4.+를 사용하면 내 코드는 이렇게 생겼고 이틀간의 광범위한 테스트 후에 잘 작동합니다.

var url         = require('url'),
    homePath    = __dirname + '/../',
    apiV1       = require(homePath + 'api/v1/start'),
    bodyParser  = require('body-parser').json({limit:'100mb'});

module.exports = function(app){
    app.get('/', function (req, res) {
        res.render( homePath + 'public/template/index');
    });

    app.get('/api/v1/', function (req, res) {
        var query = url.parse(req.url).query;
        if ( !query ) {
            res.redirect('/');
        }
        apiV1( 'GET', query, function (response) {
            res.json(response);
        });
    });

    app.get('*', function (req,res) {
        res.redirect('/');
    });

    app.post('/api/v1/', bodyParser, function (req, res) {
        if ( !req.body ) {
            res.json({
                status: 'error',
                response: 'No data to parse'
            });
        }
        apiV1( 'POST', req.body, function (response) {
            res.json(response);
        });
    });
};

다음 설정을 서버에 전달하여 요청 크기를 늘립니다.

app.use(express.json({ extended: false, limit: '50mb' }))
app.use(express.urlencoded({ limit: '50mb', extended: false, parameterLimit: 50000 }))

나는 이 문제에 대해 멀티 피부양자에게 다른 방법을 써봤다.

예:

multer = require('multer');

var uploading = multer({
  limits: {fileSize: 1000000, files:1},
});

exports.uploadpictureone = function(req, res) {
  cloudinary.uploader.upload(req.body.url, function(result) {
    res.send(result);
  });
};

module.exports = function(app) {
    app.route('/api/upload', uploading).all(uploadPolicy.isAllowed)
        .post(upload.uploadpictureone);
};

저는 다음 단편으로 문제를 해결했습니다.

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'})); 

이 게시물에 있는 모든 것을 시도해 본 결과, 성공하지 못했습니다.하지만 제게 맞는 해결책을 찾았습니다.바디파서를 사용하지 않고 익스프레스만으로 해결할 수 있었습니다.그 모습은 다음과 같습니다.

const express = require('express');    

const app = express();
app.use(express.json({limit: '25mb'}));
app.use(express.urlencoded({limit: '25mb', extended: true}));

콘솔에서 사용되지 않는 메시지를 제거하려면 extended: true를 사용해야 합니다.

도 그 했지만, .app.use(bodyParser.json())음음음같 뭇매하다

app.use(bodyParser.json())
app.use(bodyParser.json({ limit: '50mb' }))

【】을 app.use(bodyParser.json())문제를 해결했습니다.

내우경 in를 삭제합니다.Content-type동작하고 있습니다.

「 」를 사용하고 express.json() bodyParser를 함께 사용하면 express가 자체 제한을 설정하기 때문에 오류가 발생합니다.

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

위 코드를 삭제하고 아래 코드를 추가합니다.

app.use(bodyParser.json({ limit: "200mb" }));
app.use(bodyParser.urlencoded({ limit: "200mb",  extended: true, parameterLimit: 1000000 }));

저는 최근에 같은 문제에 직면했고, 저는 아래 솔루션이 효과가 있습니다.

Dependency : 
express >> version : 4.17.1
body-parser >> version": 1.19.0
const express = require('express');
const bodyParser = require('body-parser');

const app = express(); 
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

개요: HTTP 431

HTTP 413 Payload Too Large 응답 상태 코드는 요청 엔티티가 서버에 의해 정의된 제한보다 크다는 것을 나타냅니다.서버가 연결을 닫거나 Retry-After 헤더필드를 반환할 수 있습니다.

이 한 줄을 더하는 것만으로 해결할 수 있습니다.

app.use(express.json({limit: '50mb'}));

또, 프런트 엔드에서 데이터를 송신하는 것보다, 이미지 전체를 백엔드로 송신해 변환하는 것을 추천합니다.

파일 사이즈의 제한은, 지정된 행에 나타나듯이 지정할 수 있습니다.

app.use(bodyParser.json({limit: '10mb', extended: true}))
app.use(bodyParser.urlencoded({limit: '10mb', extended: true}))

node-modules body-parser에서 기본 설정을 변경할 수도 있습니다.그 후 lib 폴더에는 JSON과 텍스트파일이 있습니다.그럼 여기서 제한을 변경해 주세요.실제로 이 조건은 지정된 행 app.use(bodyParser.json({limit: '10mb', extended: true})에서 제한 파라미터를 전달하지 않으면 통과합니다.

Express 4.17.1

app.use( express.urlencoded( {
    extended: true,
    limit: '50mb'
} ) )

데모 csb

다음 코드를 사용하면 문제가 해결되었습니다.

var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false, limit: '5mb' });

알렉산더의 대답에 더하기 위해서.

기본적으로는 NGINX의 업로드 제한은 파일당 1MB입니다.업로드 파일 크기를 제한하면 일부 유형의 서비스 거부(DOS) 공격 및 기타 많은 문제를 방지할 수 있습니다.

따라서 1MB 제한을 초과하는 파일을 업로드하려고 하면 413 오류가 발생합니다.

하여 파일 크기를 할 수 .client_max_body_size 、 by by by by by by by 。 하다를 사용하세요.http,server , 「」location edit (편집하기 위한 블록)client_max_body_size.

server {
  server_name example.com;

  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://127.0.0.1:8080;
    client_max_body_size 20M;
  }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/infohob.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/infohob.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

레퍼런스: NGINX에서의 파일 업로드 크기 제한

저에게 있어서 가장 큰 비결은

app.use(bodyParser.json({
  limit: '20mb'
}));

app.use(bodyParser.urlencoded({
  limit: '20mb',
  parameterLimit: 100000,
  extended: true 
}));

bodyParse.json 첫 번째 bodyParse.url 인코딩된 두 번째

IIS에서 Azure에서 NodeJS 앱을 시작하는 사용자는 Azure App Service IIS "maxRequestLength" 설정에 따라 web.config를 수정해야 합니다.

멀티를 사용하여 AWS s3에 파일을 업로드하고 있습니다.저 같은 경우에는요.client_max_body_size 100M;파일에는 에러가 , ).nginx 는 를 합니다.)nginx 는 400 에러입니다.( 413 에러입니다.)(nginx, nginx, nginx, nginx, nginx, nginx, nginx, nginx, nginx, nginx, nginx)를 사용합니다.

솔루션은 다음과 같습니다.https://stackoverflow.com/a/71240419/15477963

내 app.js 파일은 변경할 필요가 없으며, 다음과 같이 동작합니다.

const express = require('express');
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

작업:

nginx max file zise 설정 [https://patriciahillebrandt.com/nginx-413-request-entity-too-large/][1]

그리고.

app.use(bodyParser.json({ limit: "200mb" }));
app.use(bodyParser.urlencoded({ limit: "200mb",  extended: true, parameterLimit: 1000000 }));

언급URL : https://stackoverflow.com/questions/19917401/error-request-entity-too-large

반응형