问题描述:
在angularjs中,使用$.ajax向服务器请求资源时,在Chrome调试面板中,Network里有两次看似相同的网络请求。
在请求时,前者与后者的时间差距在500毫秒以内。
查阅网上资料:
- 1.是submit和button的默认事件导致重复提交,加个preventDefault()或者unbind('click)
- 2.angular路由里声明了controller,然后在html里又用了ng-controller,导致的。
然而,我这里并不是,几经查找发现一个关键词preflight
。
原来,在请求中分为简单请求和复杂请求两种。具体区别,参见文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
preflight的作用是:不同于简单请求,“预请求”要求必须先发送一个 [OPTIONS]方法请求给目的站点,来查明这个跨站请求对于目的站点是不是安全的可接受的。这样做,是因为跨站请求可能会对目的站点的数据产生影响。
明白原理后,发现第一次请求服务器没有实质数据返回,第二次请求返回了具体数据。并且,服务器端API仅被调用了一次。也就是第一次请求是为了第二次请求做准备。