◆ クロスドメイン制限なくなればいいのに
◆ レスポンス受け取れないだけでリクエストはサーバが受け取れてるのでこっそり何か送ったりサーバにアクセスしたときの処理を行わせることはできてる 

外部サイトの画像を xhr や fetch でバイナリで取得したかったのにクロスドメインだからエラーが出ました
ライブドアなど自サイトの画像でも別ドメインの画像保存用のサーバに保存されることだってありますし 不便すぎです

img タグからバイナリデータ取り出せればいいんですけど たぶん無理ですよね


サーバが許可すればクロスドメイン通信できてしまうくらいなら全部許可でいいと思うんです


クロスドメイン禁止されてる理由を改めてググッてみても

パスワードなどユーザが入力したものや見てるページとかそういう情報をこっそり自分のサーバに送って個人情報が抜き取られている

とか

そのサーバが攻撃を受けないため

とかでした


普通ページ内で動いている JavaScript ってそのページ作った人が手動で読み込んでいるものです
となると 個人情報抜き取ろうとしてるのはそのサイト(サーバ)管理者です
その場合は送り先も自分のサーバでいいので クロスドメインがあっても無駄です

ライブラリにそういう機能が仕込まれていて ライブラリ製作者のサーバに個人情報が届くようにしているならあり得そうです

ですが クロスドメインの制限ってレスポンス(HTMLとか画像などのアクセスした結果)が返ってこないだけでリクエスト(送るデータ)は送られています

試しに Nodejs で GET と POST を受け取るサーバをたててみます
var http = require("http")
var url = require("url")

http.createServer(function (req, res) {
res.writeHead(200, {"Content-Type": "text/json"})
var res_obj = {
url: req.url,
GET: url.parse(req.url).query || "",
POST: ""
}
function end(){
console.log(res_obj)
res.end(JSON.stringify(res_obj))
}
if(req.method === "POST") {
req.on('readable', function () {
res_obj.POST += req.read() || ""
})
req.on('end', function () {
end()
})
}else{
end()
}
}).listen(7618);

ここにデータを送ります
fetch("http://localhost:7618/abcd/?test=get", {
method: "POST",
body: '{image:"data:image/png;base64,iVBORw0KGgoAAAA以下略"}',
})

すると
{ url: '/abcd/?test=get',
GET: 'test=get',
POST: '{image:"data:image/png;base64,iVBORw0KGgoAAAA以下略"}' }

console にこのように表示されます
GET も POST も ちゃんとデータを受け取れています
クロスドメイン制限があったところでデータをこっそり送ることはできるんです


また ブラウザがレスポンスを受け取れないだけで サーバはちゃんとお仕事してるので ページ開いたらこっそりどこかへアクセス繰り返して DDOS 攻撃に参加してた なんてのも防げないわけです

もちろん 気づいたら知らないアカウントにログインしてる とか ログイン中のSNSで勝手に発言してる とかそういうのだってありえます


ですが https → http の通信だとサーバ側でリクエスト受け取ることができなかったです
さすがに ログインとかパスワード入力画面は https なので基本上のようなことは大丈夫なはずです


そうなると 誰にだって公開してる http のページから誰でも見える http のコンテンツを xhr や fetch でバイナリ取得できない理由がわからないです

いつも不便にしか感じないのでなくなってくれないかなー