# Web

Nginx 504 Gateway Time-out

背景

Nginx + Tomcat搭建的服务器,客户反映在在访问系统过程中会出现504 Gateway Timeout的错误,出现的频率还不低,但看上去并没什么规律。

Nginx代理配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
upstream test {
server 192.168.0.28:9087 weight=1;
}

server {
listen 81;
server_name localhost;
charset utf-8;

location / {
proxy_pass http://test;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Tomcat Console日志引起应用挂起

问题背景

给客户新开发的同步服务,其实就是采用Quartz的写的定时任务,由运维部署到客户的服务器之后总是时不时出现应用卡住不动的问题。具体现象是在windows server下启动Tomcat,Tomcat弹出的Console一开始正常刷着日志,隔一段不固定的时间就有同事报告“Tomcat Console的日志莫名停住了,定时任务也卡住不执行,而且不报任何异常信息”。

AJAX跨域POST问题(HTTP,HTTPS)

浏览器遵循同源策略(same-origin policy),它不允许当前站点的脚本与不同源的站点之间进行数据交互,只要协议、域名、端口有任何一个不同,都被视为不同源。但有时确实又必须在当前站点通过Ajax请求其他不同源的资源,这明显与同源策略相悖,于是就有了JavaScript跨域问题。

至于为什么要有同源策略,可以Google一下同源策略的详解,这里只记录如何解决Ajax跨域POst的问题,包括不同协议(HTTP, HTTPS)之间的Ajax请求。跨域问题的解决办法有很多,对于端口和协议的不同,只能通过后台来解决。

跨域资源共享(CORS)

CORS原理

CORS(Cross-Origin Resource Sharing)跨域资源共享,定义了一种跨域访问的机制,当必须在访问跨域资源时,浏览器与服务器应该如何沟通。CORS背后的基本思想就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是失败。

编程高手的进阶之路

对于外界,Coding是被神化的,似乎需要极高的智商和热情才能从事这个行业。

IT界聪明的人很多,但极具天赋真正的能称之为天才的人不多,一般人们口中所谓的天才,只不过是比平常人更快的掌握技能、完成工作罢了;只要你找到了正确的方向,并辅以足够的时间,你一样能够踏上成功彼岸。

工作中解决问题的途径有很多,你能最快想到的方法一部分取决于你的天赋另一部分是靠经验。事实上,大部分人由于平时的工作繁重,不会去思考寻找最优的解决方案,写的代码能刚好满足需求就算完事了。这样无法得到提示你甚至会无形中加重自己的工作量,因为随着年龄的增长,属于你自己的时间会越来越少,你的精力会被生活瓜分。

如何才能得到最优秀的方案呢?

首先,我们得知道什么才是最优秀的解决方案,最优解决方案需要你能够走在需求的前面,将当前需求里有的、没有直接提出来的、现在暂时没有但将来可能有的等等,及编程潜规则等各个方方面面都综合考虑,给出最优方案。以一招胜万招。

你不再被需求牵着走,而是你牵着需求走。注重细节,注意那些当前需求里没有明文给出的细节:代码性能的差异、运行平台(浏览器)的差异、需求的隐性扩展、代码的向后兼容等等。

那些年,踩过的JavaScript之坑

你编,或者不编程,项目就在那里,还未完成。你调,或者不调试,BUG就在那里,早晚得改。你踩,或者不踩,坑都在那里,等下一个受害者。

变量作用域

未使用var关键字定义的变量都是全局变量

在JavaScript中定义变量时漏掉var并不会报错。

1
2
3
4
5
function foo() {
value = 100; // value前没有var关键字,则声明了全局变量value并赋了值
}
foo();
console.log(value); // 输出 100