利用图片传输数据的另类思路_html/css_WEB-ITnose
本博客之前的《像素化你的代码》文章中,我介绍了一种将文本生成图片的方法,还提供了一个 Encode/Decode工具。在那篇文章中,我写到「这又是一个除了好玩并没什么卵用的东西」,确实如此。不过,我今天想到一个用图片传递数据的另类应用场景,分享给大家。
在 Android 系统中,很多 App 为了在网页里实现一些客户端的功能,往往会在客户端开启一个本地 HTTP 服务。通过在网页中调用这个服务的不同接口,可以轻松实现原本无法实现的功能。本文不讨论这种做法本身,只说存在的问题:随着越来越多 Web 产品升级到 HTTPS,通过 JSONP 或 XHR2 与 HTTP 服务交互就行不通了。
下面这几段直接摘自我的《 关于启用 HTTPS 的一些经验分享(一)》这篇文章:
现代浏览器(Chrome、Firefox、Safari、Microsoft Edge),基本上都遵守了 W3C 的 Mixed Content规范,将 Mixed Content 分为 Optionally-blockable和 Blockable两类:
Optionally-blockable类 Mixed Content 包含那些危险较小,即使被中间人篡改也无大碍的资源。现代浏览器默认会加载这类资源,同时会在控制台打印警告信息。这类资源包括:
- 通过
标签加载的图片(包括 SVG 图片);
- 通过
- 预读的(Prefetched)资源;
除此之外所有的 Mixed Content 都是 Blockable,浏览器必须禁止加载这类资源。所以现代浏览器中,对于 HTTPS 页面中的 JavaScript、CSS 等 HTTP 资源,一律不加载,直接在控制台打印错误信息。
也就是说对于移动端浏览器,除非将本地 HTTP 服务升级为 HTTPS,否则在 HTTPS 网页中创建 script 标签或者发送 XHR2 请求调用本地服务,默认都会被阻止。
那么,有没有其它数据交互方案可以绕过 Mixed Content 限制呢?显然,图片类 HTTP 资源属于 Optionally-blockable类 Mixed Content,现代浏览器默认不阻止他们加载,只会在控制台打印警告,地址栏不显示小绿锁而已,可以好好利用。
所以,网页端单向通知 App,不需要拿返回值时,直接把本地接口请求改用 Image 发送即可。
如果需要返回值,那就可以用我之前的方案将文本编为图片,成功加载后解码图片即可还原内容。这里要注意一点:给图片响应配置 CORS 头之后,才能在 Canvas 中读到它的像素点数据。
原理差不多就是这些,下面是一个例子(使用阅读器的同学请点到原文查看):
这个例子演示了如何通过图片在 HTTPS 网站中获取 HTTP 接口数据,用到了 Canvas。实际上,如果返回值可枚举,连 Canvas 也可以省了 —— 服务端直接生成宽 1px,高 npx 的图片,JS 获取图片高度即可知道返回值。
本文链接: https://imququ.com/post/use-image-to-transfer-data.html, 参与评论。
-- EOF--
发表于 2016-03-10 00:38:48,并被添加「canvas、HTTPS」标签。
本站部署于「 阿里云 ECS」。如果你也要购买阿里云服务,可以使用我的九折推荐码 NY1Z0E (限新用户),多谢支持!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











HTML은 간단하고 배우기 쉽고 결과를 빠르게 볼 수 있기 때문에 초보자에게 적합합니다. 1) HTML의 학습 곡선은 매끄럽고 시작하기 쉽습니다. 2) 기본 태그를 마스터하여 웹 페이지를 만들기 시작하십시오. 3) 유연성이 높고 CSS 및 JavaScript와 함께 사용할 수 있습니다. 4) 풍부한 학습 리소스와 현대 도구는 학습 과정을 지원합니다.

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

anexampleStartingtaginhtmlis, whithbeginsaparagraph.startingtagsareessentialinhtmlastheyinitiate rements, definetheirtypes, andarecrucialforstructurituringwebpages 및 smanstlingthedom.

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

웹 주석 기능에 대한 Y 축 위치 적응 알고리즘이 기사는 Word 문서와 유사한 주석 기능을 구현하는 방법, 특히 주석 간격을 다루는 방법을 모색합니다 ...

GiteEpages 정적 웹 사이트 배포 실패 : 404 오류 문제 해결 및 해결시 Gitee ...

이미지를 클릭 한 후 주변 이미지를 산란 및 확대하는 효과를 얻으려면 많은 웹 디자인이 대화식 효과를 달성해야합니다. 특정 이미지를 클릭하여 주변을 만들 수 있습니다 ...

HTML, CSS 및 JavaScript는 웹 개발의 세 가지 기둥입니다. 1. HTML은 웹 페이지 구조를 정의하고 등과 같은 태그를 사용합니다. 2. CSS는 색상, 글꼴 크기 등과 같은 선택기 및 속성을 사용하여 웹 페이지 스타일을 제어합니다.
