JS跨域技术解析——基于HTTPS协议
一、引言
在Web开发中,由于同源策略的限制,不同域的网页之间无法直接进行资源交互,这就导致了跨域问题的产生。
随着HTTPS协议的普及和成熟,我们可以通过一些技术手段实现基于HTTPS协议的JS跨域技术。
本文将详细解析这些技术。
二、同源策略与跨域问题
同源策略是浏览器安全策略的重要组成部分,它要求Web页面只能访问与其自身来源相同的资源。
所谓的“同源”,指的是协议、域名和端口都相同。
当涉及到不同域之间的数据交互时,就会出现跨域问题。
三、HTTPS协议简介
HTTPS协议是在HTTP协议基础上通过SSL/TLS加密通信的一种安全通信协议。
它在浏览器和服务器之间建立了一个加密通道,确保数据的传输过程不会被第三方窃取和篡改。
在跨域技术中,HTTPS协议为安全通信提供了基础。
四、JS跨域技术解析
1. JSONP
JSONP是一种利用动态脚本标签(
“https”为什么不能加载外部的js
首先要明确什么是HTTPS,他的主要功能协议加密传输,需要全站源码HTTPS链接,不允许调用HTTP普通协议数据,其中包括:JS、CSS、png、gif、jpg 等任何HTTP协议普通资源的存在,如果调用地址栏不会显示小锁图标,而且资源不受HTTPS加密保护。
他可以调用外部JS,但不允许调用外部的HTTP明文数据。
如何用nodejs设置proxy进行https请求
在Web项目中,有时需要通过协议调取来自其他环境的数据。
HTTPS是一种应用于安全数据传输的网络协议。
我们都知道Ajax可以异步请求数据,但单单通过ajax无法实现跨域。
采用一些其他方式需要根据不同的浏览器做相应处理,火狐,谷歌等和IE需要各自做相应判断,所以这种通过浏览器来解析数据虽然省略了数据的解压缩等处理,但是在有安全认证等情况下做跨域处理确比较困难。
比如:IE的请求Header无法更改。
这时通过Node请求并解析数据就显得比较简单了。
如下是nodejs中通过https请求数据的全过程:var https = require(https);var zlib = require(zlib);var post_data=………………;//请求数据var reqdata = (post_data);var options = {hostname: 10.225.***.***,port: 8443,path: /data/table/list,method: POST,rejectUnauthorized: false,requestCert: true,auth: admin************,headers: {username: admin,password: ************,Cookie: locale=zh_CN,X-BuildTime: 2015-01-01 20:04:11,Autologin: 4,Accept-Encoding: gzip, deflate,X-Timeout: ,Content-Type: Application/json,}};var req = (options, function (res) {});(reqdata);(response, function (response) {switch ([content-encoding]) {case gzip:var body = ;var gunzip = ();(gunzip);(data, function (data) {body += data;});(end, function () {var returndatatojson= (body);();});(error, function (e) {(error + ());();});break;case deflate:var output = ();(())(output);();break;();break;}});(error, function (e) {(new Error(problem with request: + ));();setTimeout(cb, 10);});注:options,需要有请求数据的长度,options需要加上Accept-Encoding: gzip, deflate,返回的数据需要判断是哪种压缩方式,然后解压缩获取到数据。
gunzip的end事件里的returndatatojson即是获取的数据。
怎么用js跨域读到iframe里的cookie
第一种很简单:将系统B设置为可信站点。第二种:IE设置隐私策略:在Internet选项->隐私->高级,将“替代自动cookie处理”的选项打上,并“第一方cookie”和“第三方cookie”都设置为接受;如下图:第三种:在response的head上增加p3p协议;java:增加一个filter,在doFilter部分:Java代码代码如下复制代码HttpServletResponseres=(HttpServletResponse)response;(“P3P”,”CP=CAOPSAOUR”);

