I'm experiencing intermittent API request timeouts through AWS Application Load Balancer that show as "pending" status in browser developer tools. The issue is browser-specific - Safari works perfectly, but Chrome and Brave show pending requests that eventually timeout or complete after 30-60 seconds. Architecture
Frontend: React app hosted at https://hrms.mydomain.co Backend: NestJS API on EC2 (port 3000) Domain: api-hrms.mydomain.co Setup: AWS ALB → Target Group → EC2 instance SSL: AWS Certificate Manager certificate DNS: Route 53 hosted zone + GoDaddy domain
Current Configuration Application Load Balancer:
HTTP:80 listener → Redirect to HTTPS HTTPS:443 listener → Forward to target group SSL certificate attached and working HTTP/2: Disabled (tried both enabled/disabled)
Target Group:
Protocol: HTTP, Port: 3000 Health check: HTTP, path /, timeout 5s, interval 30s Deregistration delay: 30 seconds (reduced from default 300s) Target status: Healthy
Security Groups:
ALB SG: Allows inbound 80,443 from 0.0.0.0/0 EC2 SG: Allows inbound 3000 from ALB security group only
Backend (NestJS): typescriptapp.enableCors({ origin: ['https://hrms.mydomain.co', 'http://localhost:5173'], credentials: true, }); Issue Behavior
Initial requests work perfectly - all APIs respond normally After 5-10 minutes of usage, requests start showing "pending" status Browser-specific: Safari continues working fine, Chrome/Brave affected Intermittent: Some requests go through immediately, others hang Eventually completes: Pending requests complete after 30-60 seconds Target health: Always shows "Healthy" in AWS console Direct backend test: curl http://localhost:3000 responds instantly
What I've Tried
✅ Reduced ALB idle timeout ✅ Disabled HTTP/2 on ALB ✅ Reduced deregistration delay to 30s ✅ Disabled target group stickiness ✅ Modified security group rules ✅ Rebuilt entire ALB/Target Group from scratch ✅ Tested different certificates and domains ✅ Verified DNS propagation
Network Analysis Chrome DevTools shows:
Status: (pending) Type: xhr Size: 0.0 kB Time: Pending (for 30-60 seconds)
Direct backend test: bashubuntu@ip-172-31-46-104:~$ curl -I http://localhost:3000 HTTP/1.1 200 OK X-Powered-By: Express
... responds instantly
Questions
Why does this work perfectly in Safari but not Chrome/Brave? What could cause intermittent pending requests when target health is good? Are there ALB configuration options I'm missing? Could this be related to connection pooling or keep-alive settings?
Environment
AWS Region: (your region) Target Group Protocol Version: HTTP1 ALB Type: Application Load Balancer EC2: Ubuntu with NestJS app on port 3000
Any insights into browser-specific ALB behavior or additional debugging steps would be appreciated.