Skip to content

Commit

Permalink
convert to markdown for server-side
Browse files Browse the repository at this point in the history
  • Loading branch information
yin1999 committed Aug 3, 2022
1 parent 2d931d5 commit 9db3d28
Show file tree
Hide file tree
Showing 11 changed files with 767 additions and 900 deletions.
360 changes: 161 additions & 199 deletions files/zh-cn/learn/learning_and_getting_help/index.md

Large diffs are not rendered by default.

124 changes: 55 additions & 69 deletions files/zh-cn/learn/server-side/configuring_server_mime_types/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,104 +6,90 @@ tags:
translation_of: Learn/Server-side/Configuring_server_MIME_types
original_slug: Web/Security/Securing_your_site/Configuring_server_MIME_types
---
<h2 id="Background">Background</h2>
## Background

<p>默认情况下,许多 web 服务器会为那些未知内容类型的文件配置一个默认 MIME 类型<code>text/plain</code> 或者<code>application/octet-stream</code> 。当一种新的内容类型被创造或者被添加到 web 服务器上,web 管理者在添加它到 web 服务器配置中可能会失败。主要原因是用户使用 Gecko-based 的浏览器,而这种浏览器只相信由 web 服务器和 web 应用所发布的 MIME 类型</p>
默认情况下,许多 web 服务器会为那些未知内容类型的文件配置一个默认 MIME 类型`text/plain` 或者`application/octet-stream` 。当一种新的内容类型被创造或者被添加到 web 服务器上,web 管理者在添加它到 web 服务器配置中可能会失败。主要原因是用户使用 Gecko-based 的浏览器,而这种浏览器只相信由 web 服务器和 web 应用所发布的 MIME 类型

<h3 id="What_are_MIME_types.3F">What are MIME types?</h3>
### What are MIME types?

<p>MIME 类型描述了邮件或者 web 服务器或者 web 应用中的媒体内容的类型,其目的是为了指导 web 浏览器对媒体内容的处理和表现。MIME 类型的示例如下:</p>
MIME 类型描述了邮件或者 web 服务器或者 web 应用中的媒体内容的类型,其目的是为了指导 web 浏览器对媒体内容的处理和表现。MIME 类型的示例如下:

<ul>
<li><code>text/html</code> 对于一般网页</li>
<li><code>text/plain</code> 对于一般文本</li>
<li><code>text/css</code> 对于级联样式表</li>
<li><code>text/javascript</code> 对于脚本</li>
<li><code>application/octet-stream</code> 意味着“下载这个文件”</li>
<li><code>application/x-java-applet</code> 对于 Java applets</li>
<li><code>application/pdf</code> 对于 PDF 文档</li>
</ul>
- `text/html` 对于一般网页
- `text/plain` 对于一般文本
- `text/css` 对于级联样式表
- `text/javascript` 对于脚本
- `application/octet-stream` 意味着“下载这个文件”
- `application/x-java-applet` 对于 Java applets
- `application/pdf` 对于 PDF 文档

<h3 id="Technical_Background">Technical Background</h3>
### Technical Background

<p>完整的 MIME 类型列表可在 <a href="http://www.iana.org/assignments/media-types/index.html">IANA | MIME Media Types</a> 查看。</p>
完整的 MIME 类型列表可在 [IANA | MIME Media Types](http://www.iana.org/assignments/media-types/index.html) 查看。

<p>在<a href="http://www.w3.org/Protocols/HTTP/1.1/spec.html">HTTP specification</a> 中定义了能够描述在 web 中使用的媒体类型的 MIME 超集。</p>
[HTTP specification](http://www.w3.org/Protocols/HTTP/1.1/spec.html) 中定义了能够描述在 web 中使用的媒体类型的 MIME 超集。

<h3 id="Why_are_correct_MIME_types_important.3F">Why are correct MIME types important?</h3>
### Why are correct MIME types important?

<p>对于某些浏览器,例如 IE,它尝试允许 web 服务器对于错误配置通过其源码猜测它可能的正确 MIME 类型。</p>
对于某些浏览器,例如 IE,它尝试允许 web 服务器对于错误配置通过其源码猜测它可能的正确 MIME 类型。

<p>这种做法将会避免许多由 web 管理员他们的错误。因为当内容的 MIME 类型错误,IE 将会用可能正确的 MIME 类型来继续处理内容。例如你设置一个<code>img</code>的类型为<code>text/plain</code> ,IE 可能会设置它为正确的 MIME 类型<code>images/*</code></p>
这种做法将会避免许多由 web 管理员他们的错误。因为当内容的 MIME 类型错误,IE 将会用可能正确的 MIME 类型来继续处理内容。例如你设置一个`img`的类型为`text/plain` ,IE 可能会设置它为正确的 MIME 类型`images/*`

<p>出于安全原因,使用正确的 MIME 类型的服务内容也是重要的;恶意内容可能会影响用户的计算机,假装它是一个安全类型文档,实际上不是。</p>
出于安全原因,使用正确的 MIME 类型的服务内容也是重要的;恶意内容可能会影响用户的计算机,假装它是一个安全类型文档,实际上不是。

<div class="note">
<p><strong>备注:</strong> 从历史角度,只要 HTML 文档请求处理 CSS 文件,Firefox 能够正常加载 CSS 即使它设置了错误的 MIME 类型。处于安全原因,{{ gecko("2.0") }} 对于从请求文档不同来源加载的样式表,将不再这样做。如果 CSS 来自于不同来源,你必须设置它的正确 MIME 类型 (<code>text/css</code>).</p>
> **备注:** 从历史角度,只要 HTML 文档请求处理 CSS 文件,Firefox 能够正常加载 CSS 即使它设置了错误的 MIME 类型。处于安全原因,{{ gecko("2.0") }} 对于从请求文档不同来源加载的样式表,将不再这样做。如果 CSS 来自于不同来源,你必须设置它的正确 MIME 类型 (`text/css`).
>
> Gecko 1.9.1.11 (Firefox 3.5.11) 和 Gecko 1.9.2.5 (Firefox 3.6.5) 同样实施这种安全措施,但是提高它的实用性。如果样式表中的第一行看起来是一个很好的 CSS 构造,则存在允许加载的临时启发式算法。在 Firefox 4 中已经删除了启发式,您必须正确设置`text/css` 的 MIME 类型,才能够识别 CSS。
<p>Gecko 1.9.1.11 (Firefox 3.5.11) 和 Gecko 1.9.2.5 (Firefox 3.6.5) 同样实施这种安全措施,但是提高它的实用性。如果样式表中的第一行看起来是一个很好的 CSS 构造,则存在允许加载的临时启发式算法。在 Firefox 4 中已经删除了启发式,您必须正确设置<code>text/css</code> 的 MIME 类型,才能够识别 CSS。</p>
</div>
## 为何浏览器不应该猜测 MIME 类型

<h2 id="Why_browsers_should_not_guess_MIME_types">为何浏览器不应该猜测 MIME 类型</h2>
除了违返了 HTTP 规范,让浏览器去猜测正确的 MIME 类型是一个差劲的策略。原因如下

<p>除了违返了 HTTP 规范,让浏览器去猜测正确的 MIME 类型是一个差劲的策略。原因如下</p>
#### 失去控制

<h4 id="Loss_of_control">失去控制</h4>
假如浏览器忽略报告的 MIME 类型,web 管理员和用户不在对内容如何进行处理有发言权了。

<p>假如浏览器忽略报告的 MIME 类型,web 管理员和用户不在对内容如何进行处理有发言权了。</p>
例如,面对 web 开发员的网址可能希望发送某些实例 HTML 文档,同时通希望能够以 `text/html`或者 `text/plain` 的 MIME 类型进行数据的处理和显示 或者 作为一个源代码。如果浏览器猜测它的正确 MIME 类型为 `text/html` 那么开发员不在有权利进行选择了。

<p>例如,面对 web 开发员的网址可能希望发送某些实例 HTML 文档,同时通希望能够以 <code>text/html</code>或者 <code>text/plain</code> 的 MIME 类型进行数据的处理和显示 或者 作为一个源代码。如果浏览器猜测它的正确 MIME 类型为 <code>text/html</code> 那么开发员不在有权利进行选择了。</p>
#### 安全性

<h4 id="Security">安全性</h4>
一些内容类型,例如可执行程序,本质上是不安全的。原因是经过规范化的 MIME 类型都有经过严格规定浏览器如何对这类类型的文件进行操作。一个可执行程序不能够在用户的电脑浏览器上执行,但可以通过弹出会话询问是否下载这个文件

<p>一些内容类型,例如可执行程序,本质上是不安全的。原因是经过规范化的 MIME 类型都有经过严格规定浏览器如何对这类类型的文件进行操作。一个可执行程序不能够在用户的电脑浏览器上执行,但可以通过弹出会话询问是否下载这个文件</p>
MIME 类型猜测导致 IE 浏览器的安全漏洞(通过利用 IE 能够将错误的 MIME 类型 修改为正确的类型)。这绕过了正常的下载对话框,导致 InternetExplorer 猜测内容是可执行程序,然后在用户的计算机上运行。

<p>MIME 类型猜测导致 IE 浏览器的安全漏洞(通过利用 IE 能够将错误的 MIME 类型 修改为正确的类型)。这绕过了正常的下载对话框,导致 InternetExplorer 猜测内容是可执行程序,然后在用户的计算机上运行。</p>
## 如何确定服务器发送内容的 MIME 类型

<h2 id="如何确定服务器发送内容的_MIME_类型">如何确定服务器发送内容的 MIME 类型</h2>
通过开发者工具的 ContentType 查看 MIME 类型

<p>通过开发者工具的 ContentType 查看 MIME 类型。</p>
根据标准,通过一个 `meta` 标签来设置 MIME 类型 例如 `<meta http-equiv="Content-Type" content="text/html">` 当包含{{HTTPHeader("Content-Type")}} 时则忽略 `meta` 标签

<p>根据标准,通过一个 <code>meta</code> 标签来设置 MIME 类型 例如 <code>&lt;meta http-equiv="Content-Type" content="text/html"&gt;</code> 当包含{{HTTPHeader("Content-Type")}} 时则忽略 <code>meta</code> 标签</p>
## 如何为你的内容确定正确的 MIME 类型

这里有几种方法来确定文件的正确 MIME 类型

1. 如果你的内容是通过供应商软件应用创建的,那么你可以阅读供应商文档确认不同媒体文件的 MIME 值
2. 通过查看完整的 MIME 类型表 [IANA | MIME Media Types registry](http://www.iana.org/assignments/media-types/index.html)
3. 如果使用插件 netscape gecko 显示媒体类型,请安装插件,然后查看“帮助”>“关于插件”菜单,以查看哪些 MIME 类型与媒体类型相关联。
4. 搜索文件扩展名 [FILExt](http://filext.com/) 或者[File extensions reference](http://www.file-extensions.org/) ,确认扩展名和哪种类型的 MIME 相关联

<h2 id="如何为你的内容确定正确的_MIME_类型">如何为你的内容确定正确的 MIME 类型</h2>
## 如何设置服务器以发送正确的 MIME 类型

<p>这里有几种方法来确定文件的正确 MIME 类型</p>
基本的方法是配置你的服务器发送正确的 HTTP `ContentType`类型给每个文档

<ol>
<li>如果你的内容是通过供应商软件应用创建的,那么你可以阅读供应商文档确认不同媒体文件的 MIME 值</li>
<li>通过查看完整的 MIME 类型表 <a href="http://www.iana.org/assignments/media-types/index.html">IANA | MIME Media Types registry</a> </li>
<li>如果使用插件 netscape gecko 显示媒体类型,请安装插件,然后查看“帮助”&gt;“关于插件”菜单,以查看哪些 MIME 类型与媒体类型相关联。</li>
<li>搜索文件扩展名 <a href="http://filext.com/">FILExt</a> 或者<a href="http://www.file-extensions.org/">File extensions reference</a> ,确认扩展名和哪种类型的 MIME 相关联</li>
</ol>
- 如果您正在使用 Apache Web 服务器,只需将此示例.htaccess 文件复制到包含要使用正确 MIME 类型发送的文件的目录中。如果你有一个完整的文件子目录,只需将文件放在父目录中;您不需要将它放在每个子目录中。
- 如果您使用的是 Microsoft IIS, 请参阅[IANA | MIME Media Types registry](http://www.iana.org/assignments/media-types/index.html)这篇文章。
- 如果您使用服务器端脚本生成内容,通常可以在脚本顶部附近添加一行。您可以从 Perl,PHP,ASP 或 Java 提供 HTML 以外的内容 - 只需相应地更改 MIME 类型即可。

<h2 id="如何设置服务器以发送正确的MIME类型">如何设置服务器以发送正确的 MIME 类型</h2>
- 对于 Perl CGI,你应该在文档其他行之前输出 `print "Content-Type: text/html\n\n";`。如果您正在使用 CGI 模块,你可以使用 `print $cgi->header('text/html');` 代替,其中 `$cgi` 是对 CGI 实例的引用。
- 对于 PHP,你应该在文档其他行之前输出 `header('Content-Type: text/html');`
- 对于 ASP, 你应该在文档其他行之前输出`response.ContentType = "text/html";`
- 对于 Java servlet, 你需要在`doGet``doPost` 方法之前输出`response.setContentType("text/html");` ,其中 `response` 是对 `HttpServletResponse`的引用。

<p>基本的方法是配置你的服务器发送正确的 HTTP <code>ContentType</code>类型给每个文档</p>
### Related Links

<ul>
<li>如果您正在使用 Apache Web 服务器,只需将此示例.htaccess 文件复制到包含要使用正确 MIME 类型发送的文件的目录中。如果你有一个完整的文件子目录,只需将文件放在父目录中;您不需要将它放在每个子目录中。</li>
<li>如果您使用的是 Microsoft IIS, 请参阅<a href="http://www.iana.org/assignments/media-types/index.html">IANA | MIME Media Types registry</a>这篇文章。</li>
<li>如果您使用服务器端脚本生成内容,通常可以在脚本顶部附近添加一行。您可以从 Perl,PHP,ASP 或 Java 提供 HTML 以外的内容 - 只需相应地更改 MIME 类型即可。
<ul>
<li>对于 Perl CGI,你应该在文档其他行之前输出 <code>print "Content-Type: text/html\n\n";</code>。如果您正在使用 CGI 模块,你可以使用 <code>print $cgi-&gt;header('text/html');</code> 代替,其中 <code>$cgi</code> 是对 CGI 实例的引用。</li>
<li>对于 PHP,你应该在文档其他行之前输出 <code>header('Content-Type: text/html');</code>。</li>
<li>对于 ASP, 你应该在文档其他行之前输出<code>response.ContentType = "text/html";</code>。</li>
<li>对于 Java servlet, 你需要在<code>doGet</code> 或 <code>doPost</code> 方法之前输出<code>response.setContentType("text/html");</code> ,其中 <code>response</code> 是对 <code>HttpServletResponse</code>的引用。</li>
</ul>
</li>
</ul>

<h3 id="Related_Links">Related Links</h3>

<ul>
<li><a href="/en/Incorrect_MIME_Type_for_CSS_Files">Incorrect MIME Type for CSS Files</a></li>
<li><a href="http://www.iana.org/assignments/media-types/index.html">IANA | MIME Media Types</a></li>
<li><a href="http://www.w3.org/Protocols/HTTP/1.1/spec.html">Hypertext Transfer Protocol — HTTP/1.1</a></li>
<li><a href="http://support.microsoft.com/default.aspx?sd=msdn&amp;scid=kb;en-us;293336">Microsoft - 293336 - INFO: WebCast: MIME Type Handling in Microsoft Internet Explorer</a></li>
<li><a href="http://msdn.microsoft.com/workshop/networking/moniker/overview/appendix_a.asp">Microsoft - Appendix A: MIME Type Detection in Internet Explorer</a></li>
<li><a href="http://www.microsoft.com/windows/ie/downloads/critical/q290108/">Microsoft - Security Update, March 29, 2001</a></li>
<li><a href="http://www.microsoft.com/windows/ie/downloads/critical/Q313675/">Microsoft - Security Update, December 13, 2001</a></li>
</ul>
- [Incorrect MIME Type for CSS Files](/en/Incorrect_MIME_Type_for_CSS_Files)
- [IANA | MIME Media Types](http://www.iana.org/assignments/media-types/index.html)
- [Hypertext Transfer Protocol — HTTP/1.1](http://www.w3.org/Protocols/HTTP/1.1/spec.html)
- [Microsoft - 293336 - INFO: WebCast: MIME Type Handling in Microsoft Internet Explorer](http://support.microsoft.com/default.aspx?sd=msdn&scid=kb;en-us;293336)
- [Microsoft - Appendix A: MIME Type Detection in Internet Explorer](http://msdn.microsoft.com/workshop/networking/moniker/overview/appendix_a.asp)
- [Microsoft - Security Update, March 29, 2001](http://www.microsoft.com/windows/ie/downloads/critical/q290108/)
- [Microsoft - Security Update, December 13, 2001](http://www.microsoft.com/windows/ie/downloads/critical/Q313675/)
14 changes: 8 additions & 6 deletions files/zh-cn/learn/server-side/django/testing/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,12 +107,14 @@ class Author(models.Model):

Django 使用 unittest 模块的[内置测试查找](https://docs.python.org/3/library/unittest.html#unittest-test-discovery),它将在任何使用模式**test\*.py** 命名的文件中,查找当前工作目录下的测试。如果您正确命名文件,则可以使用您喜欢的任何结构。我们建议您为测试代码创建一个模块,并为模型,视图,表单和您需要测试的任何其他类型的代码,分别创建文件。例如:

catalog/
/tests/
__init__.py
test_models.py
test_forms.py
test_views.py
```
catalog/
/tests/
__init__.py
test_models.py
test_forms.py
test_views.py
```

在 LocalLibrary 项目中,创建如上所示的文件结构。**\_\_init\_\_.py** 应该是一个空文件(这告诉 Python 该目录是一个套件包)。您可以通过复制和重命名框架测试文件 **/catalog/tests.py**,来创建三个测试文件。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ exports.author_delete_get = function(req, res, next) {
};
```

控制器从 URL 参数(`req.params.id`)中,获取要删除的`Author`实例的 id。它使用`async.parallel()` 方法,并行获取作者记录和所有相关书本。当两个操作都完成后,它将呈现**`author_delete`\*\***.pug\*\*视图,为`title``author``author_books`传递变量。
控制器从 URL 参数(`req.params.id`)中,获取要删除的`Author`实例的 id。它使用`async.parallel()` 方法,并行获取作者记录和所有相关书本。当两个操作都完成后,它将呈现 **author_delete.pug** 视图,为 `title``author` `author_books` 传递变量。

> **备注:** 如果`findById()`返回“没有结果”,则作者不在数据库中。在这种情况下,没有什么可以删除,所以我们立即呈现所有作者的列表。
>
Expand Down
Loading

0 comments on commit 9db3d28

Please sign in to comment.