title: Kubernetes nginx ingress controller returns 502 but only for AJAX/XmlHttpRequest requests
body: <p>I have a web app running Kubernetes behind an nginx ingress controller, it works fine for request browsing, but any AJAX/XMLHTTPRequest from the browser gets a 502 error from nginx.</p>
  
  <p>I captured the HTTP headers for both regular and AJAX request that they look fine, correct Host header, protocol, etc. I am confused why only XMLHttpRequest requests get the 502 from nginx. There is no delay/hang, the 502 is immediate. The requests appear to never reaches app, but get rejected by nginx itself. Switching nginx out for a direct Load Balancer and the problem goes away.</p>
  
  <p>I am going to dig further but I wondered if anyone else using the nginx ingress controller seen this problem before and solved it?</p>
  
  <p>I picked this error out of the nginx log which suggests the container return a response with a too large header for an nginx buffer. However I checked nginx.conf and buffering is disabled: 'proxy_buffering off;'</p>
  
  <pre><code>2016/10/27 19:55:51 [error] 309#309: *43363 upstream sent too big header while reading response header from upstream, client: 10.20.51.1, server: foo.example.com, request: "GET /admin/pages/listview HTTP/2.0", upstream: "http://10.20.66.97:80/admin/pages/listview", host: "foo.example.com", referrer: "https://foo.example.com/admin/pages"
  </code></pre>
  
  <p>Strangely you get the 504 error only if XmlHttpRequest requests the URL. If I request the same URL with curl it works fine and the response header is as below. What about the AJAX/XmlHttpRequest of the same URL would make the response headers too large?</p>
  
  <pre><code>HTTP/1.1 200 OK
  Server: nginx/1.11.3
  Date: Thu, 27 Oct 2016 20:15:16 GMT
  Content-Type: text/html; charset=utf-8
  Content-Length: 6596
  Connection: keep-alive
  X-Frame-Options: SAMEORIGIN
  X-Powered-By: PHP/5.5.9-1ubuntu4.19
  Expires: Thu, 19 Nov 1981 08:52:00 GMT
  Cache-Control: max-age=0, must-revalidate, no-transform, no-cache, no-store
  Pragma: no-cache
  X-Controller: CMSPagesController
  X-Title: Example+Site+-+Pages
  X-Frame-Options: SAMEORIGIN
  Vary: X-Requested-With,Accept-Encoding,User-Agent
  Strict-Transport-Security: max-age=15724800; includeSubDomains; preload
  </code></pre>