はじめに
WKWebViewで表示するHTMLをPOSTでリクエストして取得するということがありました。
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
let webView = WKWebView()
webView.load(urlRequest)
このようにすると、WKWebViewが自動でOrigin
ヘッダーをnull
にしてリクエストします。
リクエスト先のAPIサーバはこれを不正なアクセスとみなして403エラーを返していました。
対応方法
明示的にOrigin
ヘッダーに許可されているURLを指定するようにしました。
urlRequest.setValue("https://xxx.com", forHTTPHeaderField: "Origin")
対応方法として正しいかは微妙ですが(そもそもPOSTリクエストしてるのが例外?)、一旦これで問題は回避できました。
Originヘッダーについて
Origin
ヘッダーは通常クロスオリジンアクセスでブラウザなどのクライアントが付与するものですが、同一オリジンアクセスでもGET
とHEAD
以外のアクセスでは付与されるようです。
今回の場合、最初にロードするページをPOSTでリクエストしてるので、オリジンに相当するものがそもそも無いわけですが、POSTリクエストであること、オリジンが不明(そもそも無い)ということでOrigin: null
というヘッダーになったのかなと推測しています。