文档章节

跨域问题随笔

草原-星空
 草原-星空
发布于 2017/08/01 20:28
字数 985
阅读 1
收藏 0

什么是跨域? 概念:只要协议、域名、端口有任何一个不同,都被当作是不同的域。 URL 说明 是否允许通信

http://www.a.com/a.js
http://www.a.com/b.js     同一域名下   允许
http://www.a.com/lab/a.js
http://www.a.com/script/b.js 同一域名下不同文件夹 允许
http://www.a.com:8000/a.js
http://www.a.com/b.js     同一域名,不同端口  不允许
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同协议 不允许
http://www.a.com/a.js
http://70.32.92.74/b.js 域名和域名对应ip 不允许
http://www.a.com/a.js
http://script.a.com/b.js 主域相同,子域不同 不允许
http://www.a.com/a.js
http://a.com/b.js 同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.js
http://www.a.com/b.js 不同域名 不允许

对于端口和协议的不同,只能通过后台来解决。 跨域资源共享(CORS): CORS(Cross-Origin Resource Sharing)跨域资源共享,定义了必须在访问跨域资源时,浏览器与服务器应该如何沟通。CORS背后的基本思想就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是失败。 也就是通常是否可以跨域共享,必须由服务器端决定 服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。 如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问。 如果浏览器支持,浏览器内部会处理。则前端不需要设置。 通过jsonp跨域: 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。 例如:

<script type="text/javascript"> function dosomething(jsondata){ //处理获得的json数据 } </script>

<script src="http://example.com/data.php?callback=dosomething"></script>

js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。所以jsonp是需要服务器端的页面进行相应的配合的。

HTTP响应头 本节列出了由“跨原始资源共享”规范定义的服务器为访问控制请求发回的HTTP响应头。上一节概述了这些行动。 访问控制允许来源 返回的资源可能有一个Access-Control-Allow-Origin标题,具有以下语法: Access-Control-Allow-Origin: <origin> | * 该origin参数指定可访问资源的URI。浏览器必须执行此操作。对于没有凭据的请求,服务器可以将“”指定为通配符,从而允许任何来源访问资源。 例如,要允许http://mozilla.org访问资源,您可以指定: Access-Control-Allow-Origin: http://mozilla.org 如果服务器指定一个原始主机而不是“”,那么还可以在Vary响应头中包含Origin,以便向客户端指示服务器响应将根据Origin请求头的值而有所不同。 访问控制允许的凭据 的Access-Control-Allow-Credentials报头指示是否对所述请求的响应可以在被暴露credentials标记为真。当作为对预检要求的响应的一部分使用时,这表示是否可以使用凭据进行实际请求。请注意,简单GET请求不是预先指示的,因此如果对具有凭据的资源进行请求,如果该资源未返回此标头,则响应将被浏览器忽略,而不会返回到Web内容。 Access-Control-Allow-Credentials: true 访问控制允许的方法 该Access-Control-Allow-Methods头指定访问资源时所允许的一种或多种方法。这用于响应预检要求。上面讨论了请求是预先启动的条件。 Access-Control-Allow-Methods: <method>[, <method>]* java 过滤器的设置方法:

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) servletResponse;

    response.setHeader("Access-Control-Allow-Origin",((HttpServletRequest) servletRequest).getHeader("origin"));
    response.setHeader("Access-Control-Allow-Credentials","true");
    response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With");
    response.setHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS, PUT, DELETE, HEAD, PATCH, TRACE");
    filterChain.doFilter(servletRequest,servletResponse);
}

© 著作权归作者所有

草原-星空
粉丝 0
博文 31
码字总数 36144
作品 0
闸北
私信 提问
使用canvas保存网页为pdf文件支持跨域

前言 之前上一篇随笔说了Canvas截图网页为图片,下来个新需求,把网页截图后保存为PDF文件供用户下载。 使用canvas保存网页为pdf文件支持跨域 正文 需求:用户点击下载,将页面保存为PDF文件...

嫣然丫丫丫
2018/11/22
0
0
关于withCredentials和CORS[项目笔记]

参考链接 koa2-cors设置允许指定单个域名、多个域名、所有域名跨域 当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域. 跨域资源共享 () 是一种...

阳光。
09/10
0
0
关于跨域问题

跨域首先要知道域是什么?域(Domain)是Windows网络中独立运行的单位,域和域之间相互访问,则需要建立信任关系。信任关系是连接在域和域之间的桥梁。当一个域和其他域建立信任关系之后,两...

lihao0609
2017/12/13
0
0
ajax跨域问题我只学一种解决方案

Ajax跨域问题的jsonp解决方案 在前端我们经常会使用Ajax来向服务器发送请求和接收服务器响应回来的数据,一般来说在同一个服务器的数据来往是没有什么问题的,但是有时使用Ajax请求数据并不局限...

JH30K
10/05
0
0
JavaScript跨域问题解决办法

一、什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。这里把涉及到跨域的一些问题简单地整理一下...

谢思华
2015/08/24
227
0

没有更多内容

加载失败,请刷新页面

加载更多

x002-语言元素

变量命令规则 硬性规则: 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,数字不能开头。 大小写敏感(大写的a和小写的A是两个不同的变量)。 不要跟关键字(有特殊...

伟大源于勇敢的开始
今天
4
0
nginx反向代理配置

nginx配置文件位置/usr/local/nginx/conf/nginx.conf 配置文件修改: # cd /usr/local/nginx/conf # vim nginx.conf server {listen 80;server_name localhost;#charset k......

行者终成事
今天
5
0
OSChina 周日乱弹 —— 这是假的,和我之前的不一样

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《男孩》-梁博 / 陶孟童 / 肖和东 / 高誉容 《男孩》-梁博 / 陶孟童 / 肖和东 / 高誉容 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
8
0
Rust学习笔记一 数据类型

写在前面 我也不是什么特别厉害的大牛,学历也很低,只是对一些新语言比较感兴趣,接触过的语言不算多也不算少,大部分也都浅尝辄止,所以理解上可能会有一些偏差。 自学了Java、Kotlin、Python、...

MusiCodeXY
今天
5
0
Java 脚本引擎入门

Java Script Engine Java 脚本引擎可以将脚本嵌入Java代码中,可以自定义和扩展Java应用程序,自JDK1.6被引入,基于Rhino引擎,JDK1.8后使用Nashorn引擎,支持ECMAScript 5,但后期还可能会换...

阿提说说
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部