jsonp为何只能是get方法?

看了几篇文章,也没有搞懂,请解释一下?
最好的解释在这里
https://segmentfault.com/q/10...

问题演变成
<script>标签,只支持GET ?
我继续问,

为何
<script>标签,只支持GET ?

阅读 4.5k
3 个回答

因为script就是页面获取脚本并执行啊,你见过浏览器加载文件用别的方法的吗,post是用来向服务器发送数据的。

还有,现在已经没有使用jsonp的必要了,其他方法不能跨域的jsonp一样不能跨,其他方法要修改服务器端的jsonp一样要修改,用点更现代的方法吧。

说反了,不是JSONP只能用GET,而是JSONP利用的是script标签未对src内容做跨域检查的这个“bug”;而使用src去加载,就必然是GET请求。

jsonp 的出现

简介

因为浏览器同源策略的限制,XHR 1.0(XMLHttpRequests) 并不能对非当前域的网页发起ajax请求,原则上是为了安全考虑。

jsonp 其实就是利用了浏览器对部分标签没有进行同源策略限制的原理,通常是在本地先创建function 放在window下,然后 通过创建标签的形式来载入js 并自动执行。然而这个叫载入的过程 其实只是有浏览器发起了一个js脚本的加载。然后并执行。
从另一个角度来源 加载不可信来源的JS 也会有风险

代替方案

实现跨域请求的解决方案有很多,比如早期的iframe等... 想要了解更多的 可以 B站搜索 燕十八 其中一期 远古时代的ajax

新时代的跨域

XHR 2.0

XHR 2.0 中,引入了一个新的方式来处理跨域,就是对方允许你进行跨域请求,在浏览器发起跨域请求时 会先发起一个 options 请求,来检查发起请求的一方是否符合准入条件,如果满足,就允许请求发起真正的请求,如果不允许 请求成功后 数据也会被切断。

反向代理

其实跨域从产生之初就有一个解决方案,那就是在本地建立一个反向代理服务器,对目标进行请求,这样就不存在跨域了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏