跨域请求解决方案_第1页
跨域请求解决方案_第2页
跨域请求解决方案_第3页
跨域请求解决方案_第4页
跨域请求解决方案_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

跨域请求解决方案篇一:前端解决跨域问题的 8 种方案(最新最全)1) 在/中: d(转载于: 小 龙文档 网:跨域请求解决方案) = ; varifr = (iframe); = /; = none; (ifr);= function() var doc = |; /在这里操作 doc,也就是= null; ; 2) 在/中:= ; 这个没什么好说的,因为 script 标签不受同源策略的限制。 functionloadScript(url, func) var head = | (head)0; var script = (script); =url; = = function() if(! | =loaded | =complete) func(); = = null; ; (script, 0); = sug: function(data) (data); loadScript(p /我们请求的内容在哪里? /我们可以在 chorme 调试面板的 source 中看到script 引入的内容 原理是利用来进行传值。假设域名下的文件要和域名下的传递信息。 1) 首先创建自动创建一个隐藏的 iframe,iframe 的src 指向域名下的页面 2) 响应请求后再将通过修改的 hash 值来传递数据 3) 同时在上加一个定时器,隔一段时间来判断的值有没有变化,一旦有变化则获取获取 hash 值 注:由于两个页面不在同一个域下 IE、Chrome 不允许修改的值,所以要借助于域名下的一个代理 iframe 代码如下: 先是下的文件文件: functionstartRequest() varifr = (iframe); = none; = /lab/cscript/#paramdo; (ifr); functioncheckHash() try var data = ? (1) : ; if () (Now the data is +data); catch(e) ; setInterval(checkHash, XX); 域名下的: /模拟一个简单的参数处理操作 switch() case #paramdo: callBack();break; case #paramset:/do something break; functioncallBack() try = somedata; catch (e) / ie、chrome 的安全机制无法修改, / 所以要利用一个中间的 cnblogs 域下的代理iframe varifrproxy = (iframe);= none; = cscript/#somedata; / 注意该文件在“域下 (ifrproxy); 下的域名 /因为和自身属于同一个域,所以可以改变其的值 = (1); 的美妙之处:name 值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的 name 值(2MB) 。1) 创建/ 2) 创建/,并加入如下代码 function proxy(url, func) varisFirst = true, ifr= (iframe), loadFunc= function()if(isFirst) = p isFirst= false ;else func();(); (ifr); = ; ifr= null; ; =url; = none; if() (onload, loadFunc); =loadFunc; (iframe); proxy(/, function(data) (data); ); 3 在/中包含: = 要传送的内容; 1) /中的代码: 篇二:跨域解决方案工程项目中中的添加如下配置: CORS * GET, POST, HEAD, PUT, DELETE Accept, Origin, X-Requested-With, Content-Type, Last-Modified Set-Cookie true CORS /* 然后在 webContent 文件夹下的 lib 文件夹中拷贝入,这两个库文件即可。 还有一个技巧:在调试浏览器界面向后台请求时,注意切换出浏览器的调试界面,容易找出错误在哪里。 篇三:跨域 解决方案解读 一、 Directory 在使用中,第一个接触的类一般是 Directory。它是Lucene 存储的一个抽象,由此派生了两个类:FSDirectory和 RAMDirectory,用于控制索引文件的存储位置。使用FSDirectory 类,就是存储到硬盘;使用 RAMDirectory 类,则是存储到内存。 图 1-1 存储抽象实现 UML 图 如图 1-1,显示了这种关系。而看 Lucene 代码会发现,RAMDirectory 和 FSDirectory 还分别有一个内嵌类。这个内嵌类实际上是通过工具从 Java 版本转移过来,工具自动产生的。那就先看看 Java 代码的结构,然后再来看转移过来生成的内嵌类是干什么用的。 Directory 类一共有 11 个方法,看看类的注释就知道,翻译过来也是没有做非常细致的调整。比如,注释上有这句话“Javas i/o APIs not used directly, but rather all i/o is through this API. ”。还保留着 Java的解释了,虽然没有人会认为在 dotNet 平台会采用 Java的 API,但是,这句话确实够昏的。Directory 的注释原文:A Directory is a flat list of files. Files may be written once, when they are created. Once a file is created it may only be opened for read, or deleted. Random access is permitted both when reading and writing. Javas i/o APIs not used directly, but rather all i/o is through this API. This permits things such as: implementation of RAM-based indices;implementation indices stored in a database, via JDBC; implementation of an index as a single file; 意思就是:一个 Directory 对象是一份文件的清单。文件可能只在被创建的时候写一次。一旦文件被创建,它将只被读取或者删除。在读取的时候进行写入操作是允许的。Java 的 I/O 库没有被直接使用,所以的 I/O 操作都通过这个 API。这些存储可以允许: 实现基于内存的索引; 实现索引存入数据库,通过 JDBC; 实现一个索引是一个文件。 而 Directory 的 11 个方法分别是: 1、list 把一个 Directory 对象下的文件,按字符串数组的方式返回; 2、fileExists 给定一个文件名,如果存在,就返回 true; 3、fileModified 返回给定文件名被修改的时间; 4、touchFile 设置给定文件名文件的更新时间为现在; 5、deleteFile 删除当前 directory 对象下一个给定文件名的文件,该文件必须存在; 6、renameFile 重命名当前 directory 一个文件的文件名,如果新的名字在 directory 里已经存在,将会更换。这个要更换原子; 7、fileLength 返回文件的长度; 8、createFile 创建一个空文件,并且返回该文件的写入流; 9、openFile 返回一个存在文件的读取流; 10、makeLock 锁定该 directory 对象; 11、close 关闭该对象。 而在 Directory 类中,使用的都是抽象方法,把这个类换成接口也可以。 然后再来看看 RAMDirectory 类。RAMDirectory 是Directory 的内存操作实现。RAMDirectory 类有 5 个重载构造函数。 RAMDirectory() 构造函数无操作; RAMDirectory(Directory dir)允许把硬盘上的索引载入内存,这个操作只适用于可以被载入内存的索引。 (注:文件结构不对或者索引大小超出内存肯定就不行了。 )这个构造函数只调用了 RAMDirectory(Directory dir, boolean closeDir)构造函数,并未做其他动作。 再来看看 RAMDirectory(Directory dir, boolean closeDir)构造函数。除了默认构造函数,其他 3 个构造函数都是调用的这个构造函数做处理的。 代码 1-2:string files = (); for (int i = 0; i / make place on ram disk OutputStream os = CreateFile(filesi); / read current file InputStream is_Renamed = (filesi); / and copy to ram disk int len = (int) is_ (); byte buf = new bytelen; is_(buf, 0, len); (buf, len); / graceful cleanup is_(); (); if (closeDir) (); 其他两个构造函数用到了 FSDirectory 类把文件构造成 Directory 对象。看看代码就行了: 代码 1-3:public RAMDirectory( dir) : this(dir, false), true) public RAMDirectory( dir) : this(dir, false), true) 这两个构造函数第二个参数都是 true,和 代码 1-4: public RAMDirectory(Directory dir) : this(dir, false) 这个不一样,那是因为,这个参数是控制是否关闭传入的对象构建或者直接创建的 Directory 对象。对于传入的,也就是代码 1-4,因为这个传入的对象是个引用类型,这个如果被关闭,将影响到传递来的对象状态。而代码 1-3是有它自身创建的 Directory,关闭它并不会影响到RAMDirectory 的外部。代码 1-2 的功能就是实现把硬盘上的索引按字节转存到内存中。 首先,会创建一个文件,调用的是 RAMDirectory 自身的 CreateFile 方法: 代码 1-5 public override OutputStream CreateFile( name) RAMFile file = new RAMFile(); filesname = file; return new RAMOutputStream(file); 这个方法调用了两个还没讲的类。实现的功能就是创建一个内存的文件映像。 在 RAMDirectory 定义了一个 Hashtable,这个哈希表会在 CreateFile 被调用时,往里面填充创建的文件。所以,从硬盘往内存拷贝文件的过程中,这个哈希表就记录下了内存中所有被创建的文件。在 List 方法,就可以通过枚举的方式来获取内存中文件的数量。代码 1-6public override List() result = new ; int i = 0; names = (); while () resulti+ = () ); return result; FileExists 和 FileModified 都比较简单,对照下CreateFile 的代码很容易读懂: 代码 1-7/ Returns true iff the named

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论