Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

206
Views
Nginx comprime tipos mime con parámetros

Tengo Nginx proxy inverso de mi servicio que funciona con el protocolo OData. Estoy tratando de habilitar la compresión para estas solicitudes poniendo

 #... gzip on; gzip_types application/json; #... server { #... location /odata/ { proxy_pass http://localhost:7700/odata/; } #... }

en nginx.conf.

A veces mi servicio regresa

Tipo de contenido: aplicación/json; juego de caracteres=utf-8; odata.metadata=mínimo

y Nginx lo comprime.

Pero a veces mi servicio vuelve

Tipo de contenido: aplicación/json; odata.metadata=mínimo; odata.transmisión=verdadero; conjunto de caracteres = utf-8

y Nginx no comprime tales respuestas.

¿Qué debo hacer para permitir que Nginx comprima tales respuestas?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Resolví este problema escribiendo middleware en mi aplicación, que cambia el encabezado de tipo de contenido y lo transforma en application/json; charset=utf-8; odata.metadata=minimal; odata.streaming=true;

Después de eso, Nginx podría reconocerlo como tipo de contenido json y comprimirlo.

over 4 years ago · Santiago Trujillo Report

0

Permítanme agregar mi solución para ASP.NET Core.

Sin embargo, tenga en cuenta que estas respuestas están fragmentadas, por lo que el parámetro gzip_min_length de Nginx no funcionará y las respuestas pequeñas también se comprimirán, lo que aumentará el tamaño y reducirá el rendimiento.

 /// <summary> /// Middleware to reorder Content-Type parts for Nginx compression. /// </summary> public class FixODataMiddlewareForNginx { readonly RequestDelegate _next; public FixODataMiddlewareForNginx(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { context.Response.OnStarting(() => { var contentType = context.Response.GetTypedHeaders().ContentType; if (contentType != null && contentType.Parameters.Count > 0 && !contentType.Charset.HasValue) { contentType.Parameters.Insert(0, new NameValueHeaderValue("charset", "utf-8")); context.Response.Headers["Content-Type"] = contentType.ToString(); } return Task.CompletedTask; }); await _next.Invoke(context); } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!