php允许ajax跨域请求_ajax跨域往php程序post数据时执行两次的解决方法
2017-12-04 13:40:48  By: dwtedx

php程序是部署在IIS7上面,ajax提交数据时,遇到了两个问题,一个就是跨域,一个php程序总会被执行两次。


第一个问题的解决方法,是百度出来的,添加下面几行代码就可以了:


header(´Access-Control-Allow-Origin:*´);
header("Access-Control-Allow-Headers: x-requested-with,content-type");
header(´Access-Control-Allow-Methods: OPTIONS,POST,GET´);


其实,也可以直接在iis里面设置,不用添加代码,直接选择站点,然后点右边的http响应标头,在里面直接配好,就可以了。如图:

ajax跨域


第二个问题,一直没有百度出结果,只好FQ用google,一下就看明白了,然后顺着线索找,终于理清楚了。

在CORS .net 跨域解决方案里,是这样介绍的(http://jingyan.baidu.com/article/03b2f78c190ad25ea237ae33.html)


同一个请求需要两个相同请求地址的方法,一个标记为“POST”,另一个标记为“OPTIONS“,实体方法为标记”POST“的方法,这里”OPTIONS“方法不需要做任何逻辑操并且返回值为void即可(其实OPTIONS请求为浏览器的校验,发带参数的POST请求时浏览器会先发一个OPTIONS请求,检验request 头信息和response头信息一致后才真正发起POST请求)


抓包发现,确实如此,浏览器产生了两个请求,OPTIONS service/service.php HTTP/1.1和POST /service/service.php HTTP/1.1

本想着像文中说的那样,让请求OPTIONS时,直接返回void,但是在看到配置php的时候,可以直接限制动作。试了一下,果然有用,现在ajax跨域,php程序只执行一次了。


iis里配置方法如下:找到php程序站点,也可以选择服务器设置,点右边的处理程序映射,找到php,点编辑,在弹出对话框里,点请求限制,再选谓词,点下面谓词之一,按照提示的输入GET,POST,我是之前为了省事,直接是默认选项(全部谓词),所以才遇到了这个问题。 如图:

iis跨域


若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+