Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

何が問題か

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。。
ではでは。

photocreate
ITの力で、写真を通じて感動があふれかえる社会を実現する「フォトライフ構想」を目指すWebサービスを展開しています
https://www.photocreate.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした