XMLHttpRequest(XHR)を使用してHTTPリクエストを送信する場合いくつかのヘッダーが制限されているの紹介していきたいと思います。
『fused to set unsafe header』エラーについて
“Refused to set unsafe header”というエラーはブラウザが許可していないHTTPリクエストヘッダーを設定しようとした場合に発生するエラーです。
ブラウザは、セキュリティ上の理由から一部のHTTPリクエストヘッダーを許可しておらずこれらのヘッダーにはアクセスできません。
たとえば、”Cookie”ヘッダーは一般的に禁止されています。
このエラーが発生した場合コードの中にunsafeなヘッダーが含まれている可能性があります。
たとえば、”Cookie”ヘッダーを設定しようとした場合このエラーが発生する可能性があります。
解決策としては、使用しているヘッダーが許可されているかどうかを確認し、許可されていない場合は別のヘッダーを使用するように修正する必要があります。またヘッダーを手動で設定する代わりにブラウザが自動的に設定するようにすることもできます。
たとえば、”Referer”ヘッダーは自動的に設定されるため手動で設定する必要はありません。
XMLHttpRequest(XHR)で制限されているヘッター
以下は制限されたヘッダーです。
XMLHttpRequest(XHR)を使用してHTTPリクエストを送信する場合、いくつかのヘッダーが制限されています。
Accept-Charset
: レスポンスの文字セットを指定することはできますが、リクエストの文字セットを指定することはできません。Accept-Encoding
: ブラウザが自動的に圧縮された応答を受け入れるため、リクエストで受け入れるエンコーディングを指定することはできません。Connection
: XHRは常にkeep-alive接続を使用します。このヘッダーを使用して切断することはできません。Content-Length
: XHRは自動的にContent-Lengthヘッダーを設定するため、このヘッダーを手動で設定する必要はありません。Cookie
: リクエストにクッキーを含めるには、XHRにcookieを明示的に設定する必要があります。したがって、Cookieヘッダーを使用することはできません。Host
: XHRは常に、リクエストを行うURLのホスト名とポート番号を自動的に決定します。したがって、Hostヘッダーを設定することはできません。Referer
: XHRは自動的にRefererヘッダーを設定するため、手動で設定する必要はありません。Accept-Charset
: リクエストの文字セットを指定することはできません。Accept-Encoding
: ブラウザが自動的に圧縮された応答を受け入れるため、リクエストで受け入れるエンコーディングを指定することはできません。Access-Control-Request-Headers
: ブラウザがリクエストに含めることを許可しないヘッダーを含めることはできません。Access-Control-Request-Method
: ブラウザがリクエストで使用することを許可しないメソッドを指定することはできません。Connection
: XHRは常にkeep-alive接続を使用するため、このヘッダーを使用して切断することはできません。Content-Length
: XHRは自動的にContent-Lengthヘッダーを設定するため、手動で設定する必要はありません。Cookie
: リクエストにクッキーを含めるには、XHRにcookieを明示的に設定する必要があります。したがって、Cookieヘッダーを使用することはできません。Cookie2
: Cookie2ヘッダーは非推奨であるため、使用することはできません。Date
: XHRは自動的にDateヘッダーを設定するため、手動で設定する必要はありません。Expect
: このヘッダーを使用することはできません。Host
: XHRは常に、リクエストを行うURLのホスト名とポート番号を自動的に決定します。したがって、Hostヘッダーを設定することはできません。Keep-Alive
: XHRは常にkeep-alive接続を使用するため、このヘッダーを使用して切断することはできません。Origin
: ブラウザが許可しないドメインからのリクエストを送信することを防止するため、このヘッダーを手動で設定することはできません。Proxy-
: これらのヘッダーは使用できません。Proxy-Authenticate
: このヘッダーを使用することはできません。Proxy-Authorization
: このヘッダーを使用することはできません。Referer
: XHRは自動的にRefererヘッダーを設定するため、手動で設定する必要はありません。TE
: このヘッダーを使用することはできません。