突然想到jsonp这种解决跨域方法的一个问题:我们都知道jsonp是利用script元素的src资源请求不受跨域限制的特性,通过动态script标签插入来解决跨域问题。那么问题来了:服务器端如何判断这个http请求是src方式的呢?它如何区分正常的http请求和src方式?
突然想到jsonp这种解决跨域方法的一个问题:我们都知道jsonp是利用script元素的src资源请求不受跨域限制的特性,通过动态script标签插入来解决跨域问题。那么问题来了:服务器端如何判断这个http请求是src方式的呢?它如何区分正常的http请求和src方式?
服务器接受到一个请求, 会去寻找有没有这个请求链接所映射的资源, 有的话就返回这个对应的资源, 没有的话就是404错误, 其实就是通过请求链接区分的. src也是一个请求,至于为什么会跨域是因为浏览器程序允许他跨域了(是否可以跨域的主要限制还是在浏览器上).
src就是正常的http请求。写在html里的<script>
和js创建的<script>
不会导致不同的http请求。
jsonp是一个需要服务器配合的方式,一般会在URL中有个callback, 在返回的代码运行完成后调用callback指定的函数名。所以如果我是服务器.. 从callback参数有无就可判断了。
其实我不明白你想问什么。
好像有点看懂你的意思了,你的意思是src是可以跨域的原因,那服务器怎么分辨是src,允许这个请求跨域?(是不是这意思。。。),script可以跨域,这个其实是浏览器决定的,并不是服务器分辨请求。。。
src 也是发送 http 请求,本质上和 ajax,和图片 src,和 html,css 的下载没有什么不同。所以,由 ajax 和由 src 发出的访问到 API 的请求,服务器是分辨不出来的。
不过 ajax 不仅可以get,还能 post/put/delete, src却不能。src 只是设计用来加载js脚本的, jsonp 说起来只算一个 hack/workaround。
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
这里说下我的见解 你说的http请求应该指的是ajax请求吧 ajax请求给予xhr对象来进行数据的传递,src方式 也是get请求 返回的是文件,也可以说是给予文件的数据交互。 本质上都是遵循http协议要求的数据请求。写过rest接口应该都明白,拦截请求的方式不一样,处理的方式就不一样。没有人会无聊的把静态资源的请求路径写的跟ajax请求模式一样 愚见,请大神指点