質問: ### 非同期通信時のcontent-type: application/json;の必要性について教えてください。 Ajaxを用いて画面遷移させないお問い合わせフォームを作成しました。 その際 ``` $.ajax({ url: 'mail.php', type:'POST', dataType: 'json', data: { name: $('.input-name').val(), email: $('.email').val(), subject: $('.subject').val(), message: $('.message').val() }, ``` dataType: 'json';として、返す値をjson形式に設定しました。 そしてphp側では ``` header('Content-Type: application/json; charset=utf-8'); ``` と設定しレスポンスする形式をjsonにしました。 その後、お問い合わせの値をバリデーションにかけ、その結果をjson_decodeでjson形式に設定しAjaxに返しブラウザに表示することができました。 でも、 ``` header('Content-Type: application/json; charset=utf-8'); ``` この設定がなくてもレスポンスがtext/htmlとなるだけで同じようにjson_decodeで直したバリデーション結果をブラウザに表示させることができました。 となるとheader()はなぜ必要なのでしょうか? ググるとxxs対策でcontent-type:をjsonにした方がいいと書いてる記事を見つけました。 この考え方以外にもheader('Content-Type: application/json; charset=utf-8');を設定する理由はありますか? Ajaxの要求どおりjson_decodeによってjson形式で渡してるので何故必要なんだろうと思うのですが・・・
回答: > > この設定がなくてもレスポンスがtext/htmlとなるだけで同じようにjson_decodeで直したバリデーション結果をブラウザに表示させることができました。 > > > 「中身は正しいし、テキストエディタで開けばちゃんと読めるから」といって、JSONデータを`.html`の拡張子で保存しますか? `Content-Type`を正しく設定しないというのは、それと同じようなことです。