<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Apache on 搁浅St的blog</title>
        <link>https://blog.huirongis.me/tags/apache/</link>
        <description>Recent content in Apache on 搁浅St的blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Sun, 08 Nov 2026 16:13:21 +0000</lastBuildDate><atom:link href="https://blog.huirongis.me/tags/apache/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>HTTP1.0和HTTP1.1的区别</title>
        <link>https://blog.huirongis.me/post/http-1-0-vs-1-1/</link>
        <pubDate>Fri, 25 Mar 2016 13:36:53 +0000</pubDate>
        
        <guid>https://blog.huirongis.me/post/http-1-0-vs-1-1/</guid>
        <description>&lt;p&gt;今天研究了下HTTP,还是挺有意思的.
接下来,就比较一下两者的区别.&lt;/p&gt;
&lt;h1 id=&#34;1-长连接&#34;&gt;1 长连接
&lt;/h1&gt;&lt;p&gt;这个应该是变化最大的一个了.在1.0的版本中,如果客户端请求头没有设置&lt;code&gt;Connection: Keep-Alive&lt;/code&gt;的话,那么每次请求完成都会立即断开连接,然后客户端又要重新建立一个HTTP连接.假设一个网页包含了10个图片,那么为了请求图片,客户端必须要发送10次请求,无疑这对带宽和资源是极大的浪费,TCP的优势就没有体现出来.
在HTTP1.1中,&lt;code&gt;keep-Alive&lt;/code&gt;已经被弃用(但是大多数服务器和浏览器都还保留这个选项).在1.1的版本中,持久连接默认就是启用的,除非你显式在响应头部包含&lt;code&gt;Connection: close&lt;/code&gt;,客户端收到响应后才会关闭连接.&lt;/p&gt;
&lt;h1 id=&#34;2-host头域&#34;&gt;2 host头域
&lt;/h1&gt;&lt;p&gt;在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname).但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址.
HTTP1.1的请求消息和响应消息都应支持&lt;code&gt;Host&lt;/code&gt;头域,且请求消息中如果没有&lt;code&gt;Host&lt;/code&gt;头域会报告一个错误(400 Bad Request).此外,服务器应该接受以绝对路径标记的资源请求.&lt;/p&gt;
&lt;h1 id=&#34;3-请求方法&#34;&gt;3 请求方法
&lt;/h1&gt;&lt;p&gt;HTTP1.1增加了&lt;code&gt;OPTIONS&lt;/code&gt;, &lt;code&gt;PUT&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;, &lt;code&gt;TRACE&lt;/code&gt;, &lt;code&gt;CONNECT&lt;/code&gt;这些Request方法.
Method         = &lt;strong&gt;&amp;ldquo;OPTIONS&amp;rdquo;&lt;/strong&gt;               ; Section 9.2
| &amp;ldquo;GET&amp;rdquo;                    ; Section 9.3
| &amp;ldquo;HEAD&amp;rdquo;                   ; Section 9.4
| &amp;ldquo;POST&amp;rdquo;                   ; Section 9.5
| &lt;strong&gt;&amp;ldquo;PUT&amp;rdquo;&lt;/strong&gt;                   ; Section 9.6
| &lt;strong&gt;&amp;ldquo;DELETE&amp;rdquo;&lt;/strong&gt;                 ; Section 9.7
| &lt;strong&gt;&amp;ldquo;TRACE&amp;rdquo;&lt;/strong&gt;               ; Section 9.8
| &lt;strong&gt;&amp;ldquo;CONNECT&amp;rdquo;&lt;/strong&gt;                ; Section 9.9
| extension-method
extension-method = token
HTTP1.1 增加的新的status code：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;(HTTP1.0没有定义任何具体的1xx status code, HTTP1.1有2个)
100 Continue
101 Switching Protocols
203 Non-Authoritative Information
205 Reset Content
206 Partial Content
302 Found (在HTTP1.0中有个 302 Moved Temporarily)
303 See Other
305 Use Proxy
307 Temporary Redirect
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Requested Range Not Satisfiable
417 Expectation Failed
504 Gateway Timeout
505 HTTP Version Not Supported
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;4-内容长度&#34;&gt;4 内容长度
&lt;/h1&gt;&lt;p&gt;通常,HTTP应答消息中发送的数据是整个发送的,&lt;code&gt;Content-Length&lt;/code&gt;消息头字段表示数据的长度.数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始.但是在一些动态网页中,由于网页是动态生成的,所以没法计算出准确的&lt;code&gt;Content-Length&lt;/code&gt;,这样导致的后果是:如果 &lt;code&gt;Content-Length&lt;/code&gt; 比实际长度短,会造成内容被截断;如果比实体内容长,会造成 pending,浏览器一直转圈圈.
所以在HTTP1.1中引入了&lt;code&gt;Transfer-Encoding&lt;/code&gt;,如果一个HTTP消息(请求消息或应答消息)的&lt;code&gt;Transfer-Encoding&lt;/code&gt;消息头的值为chunked,那么,消息体由数量未定的块组成,并以最后一个大小为0的块为结束.
ps:如果同时设置了&lt;code&gt;Content-Length&lt;/code&gt; 和&lt;code&gt;Transfer-Encoding&lt;/code&gt;,那么&lt;code&gt;Transfer-Encoding&lt;/code&gt;的优先级更高,&lt;code&gt;Content-Length&lt;/code&gt;会被忽略.&lt;/p&gt;
&lt;h1 id=&#34;5-缓存&#34;&gt;5 缓存
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;在HTTP/1.0中,使用&lt;code&gt;Expire&lt;/code&gt;头域来判断资源的&lt;code&gt;fresh&lt;/code&gt;或&lt;code&gt;stale&lt;/code&gt;,并使用条件请求(conditional request)来判断资源是否仍有效.例如,cache服务器通过&lt;code&gt;If-Modified-Since&lt;/code&gt;头域向服务器验证资源的&lt;code&gt;Last-Modefied&lt;/code&gt;头域是否有更新,源服务器可能返回304(Not Modified),则表明该对象仍有效;也可能返回200(OK)替换请求的Cache对象.&lt;/li&gt;
&lt;li&gt;此外,HTTP/1.0中还定义了&lt;code&gt;Pragma:no-cache&lt;/code&gt;头域,客户端使用该头域说明请求资源不能从cache中获取,而必须回源获取.&lt;/li&gt;
&lt;li&gt;HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过&lt;code&gt;Expire&lt;/code&gt;时变为&lt;code&gt;stale&lt;/code&gt;对象,cache不需要直接抛弃&lt;code&gt;stale&lt;/code&gt;对象,而是与源服务器进行重新激活(revalidation).&lt;/li&gt;
&lt;li&gt;HTTP/1.0中,&lt;code&gt;If-Modified-Since&lt;/code&gt;头域使用的是绝对时间戳,精确到秒,但使用绝对时间会带来不同机器上的时钟同步问题.而HTTP/1.1中引入了一个&lt;code&gt;ETag&lt;/code&gt;头域用于重激活机制,它的值&lt;code&gt;entity tag&lt;/code&gt;可以用来唯一的描述一个资源.请求消息中可以使用&lt;code&gt;If-None-Match&lt;/code&gt;头域来匹配资源的&lt;code&gt;entitytag&lt;/code&gt;是否有变化.&lt;/li&gt;
&lt;li&gt;为了使caching机制更加灵活,HTTP/1.1增加了&lt;code&gt;Cache-Control&lt;/code&gt;头域(请求消息和响应消息都可使用),它支持一个可扩展的指令子集：例如&lt;code&gt;max-age&lt;/code&gt;指令支持相对时间戳;&lt;code&gt;private&lt;/code&gt;和&lt;code&gt;no-store&lt;/code&gt;指令禁止对象被缓存;&lt;code&gt;no-transform&lt;/code&gt;阻止Proxy进行任何改变响应的行为.&lt;/li&gt;
&lt;li&gt;Cache使用关键字索引在磁盘中缓存的对象,在HTTP/1.0中使用资源的URL作为关键字.但可能存在不同的资源基于同一个URL的情况,要区别它们还需要客户端提供更多的信息,如&lt;code&gt;Accept-Language&lt;/code&gt;和&lt;code&gt;Accept-Charset&lt;/code&gt;头域.为了支持这种内容协商机制(content negotiation mechanism),HTTP/1.1在响应消息中引入了Vary头域,该头域列出了请求消息中需要包含哪些头域用于内容协商.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;参考文献&#34;&gt;参考文献
&lt;/h1&gt;&lt;p&gt;1 &lt;a class=&#34;link&#34; href=&#34;HTTPs://imququ.com/post/transfer-encoding-header-in-HTTP.html&#34; &gt;HTTP 协议中的 Transfer-Encoding&lt;/a&gt;
2 &lt;a class=&#34;link&#34; href=&#34;http://blog.csdn.net/forgotaboutgirl/article/details/6936982&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;HTTP/1.1与HTTP/1.0的区别&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>ubuntu下设置apache的目录映射</title>
        <link>https://blog.huirongis.me/post/ubuntu-lamp-alias-setting/</link>
        <pubDate>Thu, 15 Oct 2015 22:12:37 +0000</pubDate>
        
        <guid>https://blog.huirongis.me/post/ubuntu-lamp-alias-setting/</guid>
        <description>&lt;p&gt;好吧,我的博客一不小心又荒废下来了,话不多说,进入正文.&lt;/p&gt;
&lt;p&gt;最近的项目一直在忙,发布代码的时候遇到一个麻烦事,由于所有项目代码都放在服务器的根目录,也就是&lt;code&gt;/var/www/html&lt;/code&gt;下;然后还有一个api的页面,我放在一个&lt;code&gt;api&lt;/code&gt;文件夹中,然后把整个&lt;code&gt;api&lt;/code&gt;文件夹放在&lt;code&gt;html&lt;/code&gt;目录下.由于每次发布代码都是替换整个根目录&lt;code&gt;html&lt;/code&gt;下的文件,你懂的,我每次发布项目代码后,&lt;code&gt;api&lt;/code&gt;就没了,需要我单独解压,再复制,blablabla,总之一个字,**  烦  **.
我突然想起来,phpmyadmin安装后就不在网站的根目录,但是访问的时候我却还是直接在ip后面跟目录,比如&lt;code&gt;http://127.0.0.1/phpmyadmin&lt;/code&gt;,这货应该是用了一个映射,我照着这个样子搞一个,不就行了,说干就干.&lt;/p&gt;
&lt;h1 id=&#34;1-使用的命令&#34;&gt;1 使用的命令
&lt;/h1&gt;&lt;p&gt;&lt;code&gt;Alias&lt;/code&gt; 这个是这次主要使用的命令,使用的方法很简单,如下所示&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Alias /api /home/ch/api
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;意思就是如果你在ip后面添加&lt;code&gt;/api&lt;/code&gt;后缀,也就是你在浏览器访问&lt;code&gt;http://127.0.0.1/api&lt;/code&gt;,那么实际就会访问到&lt;code&gt;/home/ch/api&lt;/code&gt;目录下&lt;/p&gt;
&lt;h1 id=&#34;2-使用方法&#34;&gt;2 使用方法
&lt;/h1&gt;&lt;h3 id=&#34;linux下&#34;&gt;Linux下
&lt;/h3&gt;&lt;p&gt;由于我用的是ubuntu,所以具体说下ubuntu下怎么用.
根据&lt;a class=&#34;link&#34; href=&#34;http://huirong.github.io/2015/04/01/installLamp/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;在Ubuntu上安装LAMP服务器并简单配置&lt;/a&gt;,这篇文章中关于&lt;code&gt;phpmyadmin&lt;/code&gt;的设置部分,以下为摘抄&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;配置Apache服务器
如果此时在浏览器中输入http://localhost/phpmyadmin，会提示404错误
此时应该进行简单的配置，将phpMyAdmin的配置文件，复制到Apache2下

cp /etc/phpmyadmin/apache.conf /etc/apache2/conf-enabled/phpmyadmin.conf
然后重启Apache服务器

service apache2 restart
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我们得到启发,本来phpmyadmin也是不在&lt;code&gt;html&lt;/code&gt;根目录下的,上面的操作做了什么呢?
我们打开&lt;code&gt;/etc/apache2/conf-enabled/phpmyadmin.conf&lt;/code&gt;这个文件看看&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

&amp;lt;Directory /usr/share/phpmyadmin&amp;gt;
    Options FollowSymLinks
    DirectoryIndex index.php

    &amp;lt;IfModule mod_php5.c&amp;gt;
        AddType application/x-httpd-php .php

        php_flag magic_quotes_gpc Off
        php_flag track_vars On
        php_flag register_globals Off
        php_admin_flag allow_url_fopen Off
        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/javascript/
    &amp;lt;/IfModule&amp;gt;

&amp;lt;/Directory&amp;gt;

# Authorize for setup
&amp;lt;Directory /usr/share/phpmyadmin/setup&amp;gt;
    &amp;lt;IfModule mod_authn_file.c&amp;gt;
    AuthType Basic
    AuthName &amp;#34;phpMyAdmin Setup&amp;#34;
    AuthUserFile /etc/phpmyadmin/htpasswd.setup
    &amp;lt;/IfModule&amp;gt;
    Require valid-user
&amp;lt;/Directory&amp;gt;

# Disallow web access to directories that don&amp;#39;t need it
&amp;lt;Directory /usr/share/phpmyadmin/libraries&amp;gt;
    Order Deny,Allow
    Deny from All
&amp;lt;/Directory&amp;gt;
&amp;lt;Directory /usr/share/phpmyadmin/setup/lib&amp;gt;
    Order Deny,Allow
    Deny from All
&amp;lt;/Directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;看看这个文件的第一行,soga,原来他用的也是&lt;code&gt;Alias&lt;/code&gt;命令,接下来我们继续往下走,下面的代码是什么意思呢?下面的代码是用来设置文件目录的权限的,就是&lt;code&gt;&amp;lt;Directory&amp;gt;&lt;/code&gt;标签里面的内容.
关于这里的设置,我们可以参考[apache官网](&lt;a class=&#34;link&#34; href=&#34;https://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#&lt;/a&gt; order)上的描述.简而言之
&lt;code&gt;Order Deny,Allow&lt;/code&gt;其实是Allow优先,举个例子&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Order Deny,Allow
Allow from All
Deny from All
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;由于&lt;code&gt;Deny&lt;/code&gt;规则在&lt;code&gt;Allow&lt;/code&gt;之前(Order规定的),所以先Deny所有的请求,然后&lt;code&gt;Allow&lt;/code&gt;规则在其后,最后的结果就是所有的人都可以随意访问.假设你要对访问进行限制,建议按照下面这样设置&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Order Deny,Allow
Allow from 192.168.1.122
Deny from All
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;也就是指允许ip为&lt;code&gt;192.168.1.122&lt;/code&gt;的用户去访问,其他的用户都会被&lt;code&gt;Deny&lt;/code&gt;&lt;/p&gt;
&lt;h1 id=&#34;3-最后的结果&#34;&gt;3 最后的结果
&lt;/h1&gt;&lt;p&gt;结合上面的分析,给出我最后的结果&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Alias /api /var/www/api
&amp;lt;Directory /var/www/api&amp;gt;
 Options FollowSymLinks Includes -Indexes

  AllowOverride None
  Order allow,deny
  allow from all
&amp;lt;/Directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这里的&lt;code&gt;-Indexes&lt;/code&gt;选项的意思是,不要列出目录
打完收工&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
