栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

由于CORS,Azure网站上的HTTP OPTIONS请求失败

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

由于CORS,Azure网站上的HTTP OPTIONS请求失败

我决定发布针对此问题的完整解决方案,因为已经提供的答案(虽然在技术上是正确的)在我这种特殊情况下不起作用。诀窍是执行以下操作:

1.添加
<customHeaders>
<httpProtocol>
web.config中

就像上面的@hcoat一样,添加

system.webServer.httpProtocol.customHeaders
是解决问题的第一步(我以前已经尝试过此操作,但是没有用)。在此处添加您需要为CORS设置的所有自定义标头和HTTP方法。

<httpProtocol>    <customHeaders>        <add name="Access-Control-Allow-Origin" value="*" />        <add name="Access-Control-Allow-Methods" value="GET,POST,DELETE,HEAD,PUT,OPTIONS" />        <add name="Access-Control-Allow-Headers" value="Origin, X-Olaround-Debug-Mode, Authorization, Accept" />        <add name="Access-Control-Expose-Headers" value="X-Olaround-Debug-Mode, X-Olaround-Request-Start-Timestamp, X-Olaround-Request-End-Timestamp, X-Olaround-Request-Time, X-Olaround-Request-Method, X-Olaround-Request-Result, X-Olaround-Request-Endpoint" />    </customHeaders></httpProtocol>

2.覆盖PHP的默认处理程序,并删除OPTIONSVerbHandler

下一步(@Bing
Han提供的解决方案)是删除

OPTIONSVerbHandler
IIS中定义的默认值,并设置一个
PHP54_via_FastCGI
接受附加HTTP方法的自定义处理程序。默认处理程序仅适用于GET,POST和HEAD请求。

<handlers>    <remove name="OPTIONSVerbHandler" />    <remove name="PHP54_via_FastCGI" />    <add name="PHP54_via_FastCGI" path="*.php" verb="GET, PUT, POST, DELETE, HEAD, OPTIONS, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK" modules="FastCgiModule" scriptProcessor="D:Program Files (x86)PHPv5.4php-cgi.exe" resourceType="Either" requireAccess="script" /></handlers>

3.删除通过您的应用程序代码设置的所有响应标头

这是造成最多问题的难题的最后一部分。由于IIS已经添加了

<customHeaders>
,所以我在上面的问题中共享的PHP代码段正在复制它们。这在浏览器级别引起了问题,该问题无法对相同类型的多个标头做出很好的响应。

最终
web.config
解决了这个问题

<?xml version="1.0" encoding="UTF-8"?><configuration>    <system.webServer>        <rewrite> <rules>     <rule name="imported Rule 1" stopProcessing="true">         <match url="^(.*)$" ignoreCase="false" />         <conditions logicalGrouping="MatchAll">  <add input="{R:1}" pattern="^(dir_path.php|lolaround|lolaround.php|app_assets)" ignoreCase="false" negate="true" />         </conditions>         <action type="Rewrite" url="lolaround.php/{R:1}" />     </rule>     <rule name="imported Rule 2" stopProcessing="true">         <match url="lolaround/(.*)" ignoreCase="false" />         <action type="Rewrite" url="/lolaround.php/{R:1}" />     </rule> </rules>        </rewrite>        <httpProtocol> <customHeaders>     <add name="Access-Control-Allow-Origin" value="*" />     <add name="Access-Control-Allow-Methods" value="GET,POST,DELETE,HEAD,PUT,OPTIONS" />     <add name="Access-Control-Allow-Headers" value="Origin, X-Olaround-Debug-Mode, Authorization, Accept" />     <add name="Access-Control-Expose-Headers" value="X-Olaround-Debug-Mode, X-Olaround-Request-Start-Timestamp, X-Olaround-Request-End-Timestamp, X-Olaround-Request-Time, X-Olaround-Request-Method, X-Olaround-Request-Result, X-Olaround-Request-Endpoint" /> </customHeaders>        </httpProtocol>        <handlers> <remove name="OPTIONSVerbHandler" /> <remove name="PHP54_via_FastCGI" /> <add name="PHP54_via_FastCGI" path="*.php" verb="GET, PUT, POST, HEAD, OPTIONS, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK" modules="FastCgiModule" scriptProcessor="D:Program Files (x86)PHPv5.4php-cgi.exe" resourceType="Either" requireAccess="script" />        </handlers>    </system.webServer></configuration>

注意 :虽然@hcoat和@Bing Han的答案在此问题中都很有用,但我只能将其中的一项奖励。我决定将其交给@Bing
Han,因为他的回答使我离解决方案最近(而且我无法通过自己的搜索找到添加自定义PHP处理程序的方法)。

更新 :我已经编辑了答案,以添加对HTTP DELETE方法的支持以及原始答案中缺少的支持。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号