我一直在寻找让我的网站加载更快的方法,我想探索的一种方法是更多地使用Cloudfront.
因为Cloudfront最初并非设计为自定义源CDN,并且因为它不支持gzipping,所以到目前为止我一直使用它来托管我的所有图像,这些图像在我们的站点代码中由他们的Cloudfront cname引用,并且远远优化了-futures标题.
另一方面,CSS和javascript文件托管在我自己的服务器上,因为直到现在我的印象是他们无法从Cloudfront gzip服务,并且gzipping(大约75%)的收益超过了使用CDN(约50%):Amazon S3(以及Cloudfront)不支持使用浏览器发送的HTTP Accept-Encoding标头以标准方式提供gzip压缩内容,以表明它们支持gzip压缩,以及所以他们无法动态地使用Gzip和服务组件.
因此,直到现在,我仍然不得不在两种选择之间做出选择:
将所有资产移至Amazon CloudFront并忘记GZipping;
保持组件自托管并配置我们的服务器以检测传入请求并在适当时执行动态GZipping,这是我到目前为止所做的.
还有人变通办法来解决这个问题,但本质上这些没有工作.[ 链接 ].
现在,似乎Amazon Cloudfront支持自定义源,并且如果您使用自定义源 [ 链接 ],现在可以使用标准HTTP Accept-Encoding方法来提供gzip压缩内容.
到目前为止,我还没有能够在我的服务器上实现新功能.我上面链接的博客文章,这是我发现的唯一一个详细说明变更的博客文章,似乎暗示你只能启用gzipping(条形图解决方法,我不想使用),如果你选择自定义来源,我宁愿不这样做:我发现在我的Cloudfront服务器上托管相应的文件更简单,并从那里链接到它们.尽管仔细阅读文档,但我不知道:
新功能是否意味着文件应该通过自定义源托管在我自己的域服务器上,如果是,那么代码设置将实现此目的;
如何配置css和javascript标头以确保它们是从Cloudfront gzip中提供的.
html5规范说:
切片内容元素或切片根元素的大纲由一个或多个可能嵌套的节的列表组成.section是一个容器,对应于原始DOM树中的某些节点.每个部分可以有一个与之关联的标题,并且可以包含任意数量的其他嵌套部分.大纲的算法还将DOM树中的每个节点与特定部分和可能的标题相关联.
并且相同的推理似乎适用于html5文档大纲算法.
我一直在检查使用HTML5大纲(h5o)[我的网站的大纲链接 ]工具但我有,因为事实上很难达到不与无用标题不堪重负清晰的轮廓,那等元素<nav>
或<footer>
将出现在您的大纲但是除非你给他们一个明确的h1-h6标题,否则它会以"无标题"的形式出现.
对于导航或页脚等内容来说,这似乎有点过分.
一种解决方案是用div替换这些元素,但这似乎打败了使用html5的全部目的.
另外,我已经试探性地在我的网站[试图链接 ],是为所有的切片元素设置标题,然后用CSS来再次隐藏标题,查看其中一些(中,基本上<nav>
和<footer>
,以及一些<section>
元素.下面是一个例子:
<nav id="content-nav">
<h2 class="hidden">Post navigation</h2>
<ul>
<li class="alignleft"><?php next_post_link('← <strong>Next Post</strong><br />%link') ?></li>
<li class="alignright"><?php previous_post_link('<strong>Previous Post</strong> →<br />%link') ?></li>
</ul>
</nav>
Run Code Online (Sandbox Code Playgroud)
这导致一个很好的diplaying网站,但我看到的问题是谷歌排名.Google 在其网站管理员工具帮助项目[ 链接 ]中隐藏了"隐藏文字和链接",明确指出:
隐藏内容中的文字或链接可能会导致您的网站被视为不值得信任,因为它向搜索引擎提供的信息与访问者的信息不同.文本(例如过多的关键字)可以通过多种方式隐藏,包括:[...]使用CSS隐藏文本...
有些人可能会觉得Google是否喜欢他们使用隐藏文字的事实并不重要,但我的大部分访问者都来自谷歌搜索,我宁愿不因为选择这种设置而受到惩罚.
有人可以就这个问题提供建议吗?
在html 5中,rel="author"
用于链接到有关页面作者的信息.这可以是一个mailto:
地址,但不一定是这样.它可以简单地链接到联系表单或"关于作者"页面(我个人不希望出于明显的原因提供电子邮件).
到目前为止,我一直在使用meta author
属性来做同样的事情 - 尽管新的html 5规范的优点是你不仅可以提供一个名称,还可以提供有关你的更多信息的链接.
根据Stack Overflow的另一个答案,Google,Yahoo和MSN 似乎没有索引<meta>
作者标签[ 来源 ].它怀疑他们目前也没有索引rel="author"
.
提供两者都有意义吗?或者目前担心这个是没有意义的?
我使用Amazon Cloudfront托管我所有网站的图像和视频,以便更快地为我的用户提供服务,这些用户遍布全球.我还将非常积极的前向缓存应用于Cloudfront上托管的元素,设置Cache-Control
为public, max-age=7776000
.
我最近发现我的烦恼是第三方网站正在与我的Cloudfront服务器进行热链接,以便在未经授权的情况下在自己的页面上显示图像.
我已经配置.htaccess
为阻止我自己的服务器上的热链接,但是没有找到在Cloudfront上执行此操作的方法,这似乎本身不支持该功能.而且,令人讨厌的是,亚马逊的Bucket Policies(可用于防止热链接)仅对S3产生影响,它们对CloudFront分发没有影响[ link ].如果您想利用这些政策,您必须直接从S3提供内容.
在我的服务器日志中搜索hotlinkers并手动更改文件名并不是一个真实的选择,尽管我一直在这样做以结束最明显的攻击.
欢迎大家提出意见.
使用中的答案,建议这个问题,以及本文它提供了一个几乎相同的解决方案,我一直在试图建立的htaccess来处理我的js和css文件自动版本化的规则.
我想这样做的原因是,我改变他们了不少,但还是希望他们能够通过积极长时间浏览器缓存,而不必每次都改变时手动输入一个新的版本号.
使用的方法很简单:(1)一个函数在模式上使用它们被更改的日期将文件编号附加到文件[filename].[version_number].[suffix]
,因此style.css
,例如,将变为style.1300638388.css
; (2)使用php,版本号包含在我网站页面的样式表声明中,如果版本化文件名与缓存文件名不同,则会向客户端浏览器提供新副本; (3)使用mod_rewrite的.htaccess中的RewriteRule重写版本号,将其恢复为原始值并提供更新后的文件.
下面列出了我在这三个阶段中使用的代码.我在http://edge.donaldjenkins.net/上我博客的沙盒版本的样式表上测试了这个
// Allows autoversioning of css and js files
/**
* Given a file, i.e. /css/base.css, replaces it with a string containing the
* file's mtime, i.e. /css/base.1221534296.css.
*
* @param $file The file to be loaded. Must be an absolute path (i.e.
* starting with slash).
*/
function auto_version($file)
{
if(strpos($file, '/') !== 0 || !file_exists($_SERVER['DOCUMENT_ROOT'] . $file))
return $file;
$mtime …
Run Code Online (Sandbox Code Playgroud) 从这里可以看出,iPhone的Safari和Safari支持所有HTML元素,包括不推荐使用的元素,甚至一些从未参与任何W3C规范的专有元素.
它实际上非常有用,包括autocapitalize
在表单中的"电子邮件"和"网站"字段中,因为没有什么比在填写这两个输入中的任何一个时取消选择SHIFT键一样烦人.这样做很简单,因为你需要做的就是将autocapitalize=off
属性添加到相应的输入中,例如:
<label for="email">E-mail</label>
<input type="email" name="email" placeholder="yourname@domain.com" autocapitalize="off" title="Enter your e-mail address" class="required email" id="email">
Run Code Online (Sandbox Code Playgroud)
iPhone和iPad都完美地将键盘与表格中附加到输入元素的属性相匹配.不幸的是,这个标记似乎打破了验证,当设置上述时,W3C响应"此时元素输入上不允许属性自动资本化".
我想这不是死的东西,但有没有办法在不破坏验证的情况下包含属性?也许我在这里弄错了.
我正在使用<body>
标签作为每个背景颜色为白色的网站上三个div的包装器.
我已经为css中的html和body设置了背景颜色为#fff,并且除了IE8之外,该网站在每个浏览器(包括IE 6和7)中都能正确呈现:
我甚至尝试直接内联设置html的样式:<html style="background-color: #fff">
但这似乎没有改变任何东西.
甚至不确定可能导致错误的原因.
html css internet-explorer background-color internet-explorer-8
我正在尝试使用 Mac OS X 上的 aws cli 创建一个可重用的委托集,以用作我的域的白名单名称服务器。我的 AWS 凭证(我为此目的创建的具有完全管理员权限的 IAM 配置文件,位置设置为us-east-1) 在设置过程中正确输入并被系统接受。
输入命令时
$ aws route53 create-reusable-delegation-set --caller-reference [CALLER-REFERENCE] --hosted-zone-id [HOSTED_ZONE] --generate-cli-skeleton
Run Code Online (Sandbox Code Playgroud)
请求成功,我得到响应:
{
"CallerReference": "",
"HostedZoneId": ""
}
Run Code Online (Sandbox Code Playgroud)
但是当我删除 --generate-cli-skeleton 并输入时
aws route53 create-reusable-delegation-set --caller-reference [CALLER-REFERENCE] --hosted-zone-id [HOSTED_ZONE]
Run Code Online (Sandbox Code Playgroud)
我明白了:
An error occurred (InvalidClientTokenId) when calling the CreateReusableDelegationSet operation: The security token included in the request is invalid.
Run Code Online (Sandbox Code Playgroud)
我的现实是,尽管我的 IAM 凭证有效,并且尽管我使用的配置文件 (donaldjenkins) 具有完全管理员权限,但在所有 aws 服务和所有命令中都被系统地拒绝,而不仅仅是 Route53。
尽管进行了广泛的研究,但我一直无法查明造成这种情况的原因。感激地收到任何建议。
css ×2
html ×2
html5 ×2
seo ×2
.htaccess ×1
amazon ×1
amazon-s3 ×1
forms ×1
gzip ×1
hotlinking ×1
input ×1
ios ×1
javascript ×1
meta-tags ×1
mod-rewrite ×1
php ×1
regex ×1
semantic-web ×1
versioning ×1