LoginSignup
6
1

More than 5 years have passed since last update.

PHP on Azure App Serviceで、PATCH、PUT、DELETEができないときにやること(2017版)

Posted at

何が問題か

PHP on Azure App Serviceな環境で、PATCH、PUT、DELETEなリクエストがエラーになります。

The page you are looking for cannot be displayed because an invalid method (HTTP verb) is being used

対処法が下記のブログに書いてはあるのですが、そのままでは動かなかったので、2017年版として更新しておきます。

どうするか

web.configsystem.webServerにを下記のように追加します。
v7.1の部分は使用しているPHPのバージョンによって読み替えてください。

<!-- web.config -->
<configuration>
  <system.webServer>
    <!-- 中略 -->
    <handlers>
        <remove name="PHP71_via_FastCGI" />
        <add name="PHP71_via_FastCGI" modules="FastCgiModule" verb="GET, PATCH, PUT, POST, DELETE, HEAD, OPTIONS" path="*.php" scriptProcessor="D:\Program Files\PHP\v7.1\php-cgi.exe" resourceType="Either" requireAccess="Script" />
    </handlers>
  </system.webServer>
</configuration>    

前述のブログにて紹介されている対処法と違うところを列挙します。

  • scriptprocessorresourcetyperequireaccessだとエラーになる
    • Unrecognized attribute 'scriptprocessor'となる
    • scriptProcessorresourceTyperequireAccessが正解
  • 64ビット版の場合は、D:\Program Files\
    • 32ビット版は、D:\Program Files (x86)\
  • verbに何故かPATCHがない
    • PATCHを追加
    • TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCKは不要なので削除

どうなるか

これで、PATCH, PUT, DELETEなリクエストに対して、200 OKが返ってくるはずです。

$ curl -i -X PATCH \
  http://{appName}.azurewebsites.net/{path to API} \
  -H 'content-type: application/json' \
  -H 'x-requested-with: XMLHttpRequest' \
  -d '{
    "foo": "bar"
}'
HTTP/1.1 200 OK
Cache-Control: no-cache, private
Content-Length: 13
Content-Type: application/json
Server: Microsoft-IIS/8.0
X-Powered-By: PHP/7.1.8
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-Powered-By: ASP.NET
...

{"bar":"baz"}

つうか、デフォルトでPATCH, PUT, DELETEは許可してほしいですね。IIS。。
ではでは。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1