zoukankan      html  css  js  c++  java
  • ajax跨域往php程序post数据时,php程序总是执行两次的解决方法

    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响应标头,在里面直接配好,就可以了。如图:

    第二个问题,一直没有百度出结果,只好翻墙用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,我是之前为了省事,直接是默认选项(全部谓词),所以才遇到了这个问题。 如图:

  • 相关阅读:
    微服务迁移记(二):注册中心(consul搭建)
    微服务迁移记(一):技术架构
    小程序入坑记录
    不思量,自难忘:我的10年程序生涯
    your password has expired.to log in you must change it
    Javascript中 a.href 和 a.getAttribute('href') 结果不完全一致
    PHP不使用递归的无限级分类
    百度移动搜索自动转码太坑爹,JS跳转地址会被抓取
    iScroll 下 a 标签失效
    浏览器的云加速可能导致IP统计异常
  • 原文地址:https://www.cnblogs.com/chendaoyin/p/5743062.html
Copyright © 2011-2022 走看看