资讯专栏INFORMATION COLUMN

hashify.me 神奇的在线服务 将整个文档存储在 URL 中

wushuiyong / 1148人阅读

摘要:是一个非常奇特的在线服务,它的目标不是解决一个问题,而是提出一个疑问当我们把整个文档储存在中时会发生什么样的事情原理整个文档被储存在之中。然而,对长度有字符的限制。当然,是开源的,你也可以部署在自己的服务器上。

Hashify 是一个非常奇特的在线服务,它的目标不是解决一个问题,而是提出一个疑问:当我们把整个文档储存在 URL 中时会发生什么样的事情?

原理

整个文档被储存在 URL 之中。Hashify 将 Unicode 通过 Base64 编码转化转化为 ASCII 字符。

> unescape(encodeURIComponent("ça va?"))
"ça va?"
> btoa(unescape(encodeURIComponent("ça va?")))
"w6dhIHZhPw=="
URL 长度限制

出乎一般人的意料,HTTP 规范并没有见限制 URL 的长度!这意味着 Hashify 可以储存任意长度的文档!

那么,浏览器是否有限制呢?大可放心,主流浏览器支持 80k 字符的 URL。例如 Chrome 在 215k 字符的 URL 时才会失去响应。

不过,服务器和代理等等的限制可能要更紧一些。

并且,由于 URL 过长,复制传播很不方便,因此 Hashify 使用了 bit.ly 来缩短网址。然而,bit.ly 对 URL 长度有 2048 字符的限制。对于大多数文档而言,这也足够了。如果文档很长的话,Hashify 会把内容切分,(最多切分成 15 份),然后将每份进行 Base64 转码并分别发送给 bit.ly。然后将 bit.ly 返回的结果组合起来:

http://hashify.me/unpack:gYi2Ie,g4fpte.

因此,Hashify 可以为 22,500 字符以下的文档生成短网址。

也就是说,22,500 字符以下的文档都可以将 bit.ly 作为存储空间!这真是对短网址生成服务绝妙的滥用!

API

已知 Hashify 网址的前提下,无需访问 hashify.me 网站便可获取文档内容,例如,使用 Python:

from base64 import b64decode
from urlparse import urlparse

def unhashify(url):
    return b64decode(urlparse(url).path[1:])

unhashify("http://hashify.me/w6dhIHZhPw==")
部署

你可以直接在 http://hashify.me 上使用 Hashify 服务。当然,Hashify 是开源的,你也可以部署在自己的服务器上。

克隆仓库:

git clone https://github.com/hashify/hashify.me

安装 Compass:

gem update --system
gem install compass

安装依赖

make setup

构建

make

假设你使用 nginx 服务器,添加配置文件并激活,

ln -s "$(pwd)/nginx.conf" /opt/local/etc/nginx/sites-available/hashify.me
ln -s ../sites-available/hashify.me /opt/local/etc/nginx/sites-enabled/hashify.me
sudo nginx -s reload
项目主页

http://hashify.me

编撰 SegmentFault

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78103.html

相关文章

  • JavaScript 编程精解 文第三版 十三、浏览器 JavaScript

    摘要:在本例中,使用属性指定链接的目标,其中表示超文本链接。您应该认为和元数据隐式出现在示例中,即使它们没有实际显示在文本中。 来源:ApacheCN『JavaScript 编程精解 中文第三版』翻译项目原文:JavaScript and the Browser 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《JavaScript 编程精解(第 2 版)》 ...

    zhiwei 评论0 收藏0
  • 【译】通过JavaScript发送表单

    摘要:能异步地发送任意数据的技术称为,表示异步的和。若你使用,使用发送表单还会影响同源策略,并导致内容被发送到一个无法访问的中。但要手动发送二进制数据的话,还有很多额外工作要做。用来发送二进制是很直接的,使用方法就好了。 系列文章说明 原文 在[发送表单数据]()一文中,HTML表单可以声明式地发送一个HTTP请求。但表单也可以用JavaScript来准备一个HTTP请求。本文将探索如何...

    chinafgj 评论0 收藏0
  • 【译】通过JavaScript发送表单

    摘要:能异步地发送任意数据的技术称为,表示异步的和。若你使用,使用发送表单还会影响同源策略,并导致内容被发送到一个无法访问的中。但要手动发送二进制数据的话,还有很多额外工作要做。用来发送二进制是很直接的,使用方法就好了。 系列文章说明 原文 在[发送表单数据]()一文中,HTML表单可以声明式地发送一个HTTP请求。但表单也可以用JavaScript来准备一个HTTP请求。本文将探索如何...

    qylost 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<