http 協(xié)議隨筆

1 socket

1.1跨網(wǎng)絡(luò)的主機間通訊

?在建立通信連接的每一端猜拾,進程間的傳輸要有兩個
?IP地址和端口號,合稱為套接字地址 socket address
?客戶機套接字地址定義了一個唯一的客戶進程
?服務(wù)器套接字地址定義了一個唯一的服務(wù)器進程


1.2 Socket套接字


Socket:套接字揍拆,進程間通信IPC的一種實現(xiàn)击罪,允許位于不同主機(或同一主機)上不同進程之間進行通信和數(shù)據(jù)交換筑凫,SocketAPI出現(xiàn)于1983年虐块,4.2 BSD實現(xiàn)

?Socket API:封裝了內(nèi)核中所提供的socket通信相關(guān)的系統(tǒng)調(diào)用

?Socket Domain:根據(jù)其所使用的地址
AF_INET:Address Family响禽,IPv4
AF_INET6:IPv6
AF_UNIX:同一主機上不同進程之間通信時使用

?Socket Type:根據(jù)使用的傳輸層協(xié)議
SOCK_STREAM:流徒爹,tcp套接字,可靠地傳遞芋类、面向連接
SOCK_DGRAM:數(shù)據(jù)報隆嗅,udp套接字,不可靠地傳遞侯繁、無連接
SOCK_RAW: 裸套接字,無須tcp或udp,APP直接通過IP包通信


1.3 客戶/服務(wù)器程序的套接字函數(shù)



套接字相關(guān)的系統(tǒng)調(diào)用:
socket(): 創(chuàng)建一個套接字
bind(): 綁定IP和端口
listen(): 監(jiān)聽
accept(): 接收請求
connect(): 請求連接建立
write(): 發(fā)送
read(): 接收
close(): 關(guān)閉連接

2 http 服務(wù)通信過程


3 http 工作機制:

3.1 工作機制:

http 請求: http request
http 響應(yīng):http response
一次http 事務(wù):http 請求《------------------》http 響應(yīng)

web 資源:
靜態(tài)文件:無需服務(wù)端組做出額外處理,客戶端發(fā)送request 到http服務(wù)器
文件后綴:.html .txt .jpg .js .css .mp3 .avi
動態(tài)文件:需要服務(wù)器端執(zhí)行程序胖喳,返回執(zhí)行的結(jié)果。
文件后綴:.php .jsp .asp

3.2 http 連接請求

1 客戶端訪問www.xxx.com;
2 DNS 解析www.xxx.com 結(jié)果IP-A給客戶端贮竟;
3 客戶端通過IP-A 訪問http服務(wù)器1丽焊,服務(wù)器1?返回index.html 文件給客戶端;
4 index.html包含很多資源咕别,客戶端訪問其他服務(wù)器獲取相關(guān)資源技健;

3.3 http 連接介紹

3.3.1 http 串行連接

3.3.2 http 并行連接

3.3.3 http 持久連接

3.3.4 http 管道化持久連接

小結(jié):

串行連接:http 事務(wù)1、http 事務(wù)2惰拱、雌贱、、偿短、 依次執(zhí)行欣孤,每一個TCP 三次握手承載一個http 事務(wù),客戶端-服務(wù)器頻繁建立TCP 三次握手并finish翔冀;

并行連接:http 事務(wù)1导街、http 事務(wù)2、纤子、搬瑰、、 并行執(zhí)行控硼,每一個TCP 三次握手承載一個http 事務(wù)泽论,客戶端-服務(wù)器頻繁建立TCP 三次握手并finish,通過多條TCP連接發(fā)起并發(fā)的HTTP請求卡乾,相比串行連接效率高翼悴;

持久連接:首次tcp 三次握手成功后,http 事務(wù)1、http 事務(wù)2鹦赎、谍椅、、古话、串行重用此TCP連接雏吭;
管道化連接:首次tcp 三次握手成功后,http 事務(wù)1陪踩、http 事務(wù)2杖们、、肩狂、摘完、并行重用此TCP連接;

4 http 協(xié)議介紹

4.1協(xié)議介紹

http 0.9:1991 傻谁, 原型版本孝治,只支持GET命令,GET index.html,服務(wù)器端只能回應(yīng)html 格式字符串栅螟;

http/1.0: 1996 ,支持cache荆秦、MIME,method;
引入POST和HEAD 命令;
每個TCP 連接只能發(fā)送一個請求力图,發(fā)送數(shù)據(jù)完畢后后連接關(guān)閉步绸;

http/1.1:1997
引入了持久連接(persistent connection),即TCP連接默認不關(guān)閉吃媒,可以被多個請求復(fù)用瓤介,不用聲明Connection: keep-alive。對于同一個域名赘那,大多數(shù)瀏覽器允許同時建立6個持久連接

引入了管道機制(pipelining)刑桑,即在同一個TCP連接里,客戶端可以同時發(fā)送多個請求募舟,進一步改進了HTTP協(xié)議的效率

新增方法:PUT祠斧、PATCH、OPTIONS拱礁、DELETE
HTTP 協(xié)議不帶有狀態(tài)琢锋,每次請求都必須附上所有信息。請求的很多字段都是重復(fù)的呢灶,浪費帶寬吴超,影響速度
http/2.0:2015年 ? HTTP2.0是SPDY的升級版

頭信息和數(shù)據(jù)體都是二進制,稱為頭信息幀和數(shù)據(jù)幀復(fù)用TCP連接鸯乃,在一個連接里鲸阻,客戶端和瀏覽器都可以同時發(fā)送多個請求或回應(yīng),且不用按順序一一對應(yīng),避免了“隊頭堵塞“,此雙向的實時通信稱為多工(Multiplexing)?

引入頭信息壓縮機制(header compression),頭信息使用gzip或compress壓縮后再發(fā)送鸟悴;客戶端和服務(wù)器同時維護一張頭信息表陈辱,所有字段都會存入這個表,生成一個索引號遣臼,不發(fā)送同樣字段性置,只發(fā)送索引號,提高速度

HTTP/2 允許服務(wù)器未經(jīng)請求揍堰,主動向客戶端發(fā)送資源,即服務(wù)器推送(server push)?

4.2 URI:統(tǒng)一資源標識

URI:統(tǒng)一資源標識嗅义,分為URL URN
URN:統(tǒng)一資源命名
URL:統(tǒng)一資源定位符屏歹,用于描述某個服務(wù)器某特定資源位置;
兩者區(qū)別:URN 定義某事物的身份之碗,而URL 提供查找該事物的方法蝙眶;

URL 組成:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
? scheme:方案,訪問服務(wù)器以獲取資源時要使用哪種協(xié)議
? user:用戶褪那,某些方案訪問資源時需要的用戶名
? password:密碼幽纷,用戶對應(yīng)的密碼,中間用:分隔
? Host:主機博敬,資源宿主服務(wù)器的主機名或IP地址
? port:端口,資源宿主服務(wù)器正在監(jiān)聽的端口號友浸,很多方案有默認端口號
? path:路徑,服務(wù)器資源的本地名,由一個/將其與前面的URL組件分隔
? params:參數(shù)偏窝,指定輸入的參數(shù)收恢,參數(shù)為名/值對,多個參數(shù)祭往,用;分隔
? query:查詢伦意,傳遞參數(shù)給程序,如數(shù)據(jù)庫硼补,用驮肉?分隔,多個查詢用&分隔
? frag:片段,一小片或一部分資源的名字,此組件在客戶端使用已骇,用#分隔

4.3 HTTP 通信過程舉例:

1 建立連接
client 瀏覽器輸入http://www.xxxx.com/index.html(DNS 解析過程略)离钝,發(fā)送http request;
2 接受請求
http 服務(wù)器接收到http request 疾捍,http request?進入http 服務(wù)器網(wǎng)卡緩沖區(qū)奈辰,操作系統(tǒng)將數(shù)據(jù)從網(wǎng)卡緩沖區(qū)讀入到內(nèi)核網(wǎng)絡(luò)socket buffer 緩沖區(qū)中,在從socket buffer 中復(fù)制到httpd 進程乱豆;
3 處理請求
httpd 分析http request報文頭部獲取請求資源的操作GET index.html奖恰;
4 訪問資源
httpd 發(fā)送命令給內(nèi)核kernel希望到磁盤中得到index.html 文件,內(nèi)核通過DMA 直接將磁盤上的文件讀入到內(nèi)核數(shù)據(jù)緩沖區(qū)中,再從數(shù)據(jù)緩沖區(qū)復(fù)制到httpd 的內(nèi)存空間瑟啃,httpd獲得index.html 文件论泛;
5 構(gòu)建響應(yīng)報文
httpd封裝http repose 報文;
6 發(fā)送響應(yīng)報文;
httpd將響應(yīng)報文發(fā)送至 -----> 內(nèi)核kernel socket buffer?----->?網(wǎng)卡緩沖區(qū)-?----->?客戶端蛹屿;
7 記錄日志屁奏;
事務(wù)結(jié)束時,web 服務(wù)器在 日志文件中添加日志記錄已執(zhí)行完成的事務(wù)错负;

4.4 MPM 工作模式

perfork MPM

Prefork MPM: 預(yù)派生模式坟瓢,有一個主控制進程,然后生成多個子進程,每個子進程有一個獨立的線程響應(yīng)用戶請求犹撒,相對比較占用內(nèi)存折联,但是比較穩(wěn)定,可以設(shè)置最大和最小進程數(shù)识颊,是最古老的一種模式诚镰,也是最穩(wěn)定的模式,適用于訪問量不是很大的場景
?優(yōu)點:穩(wěn)定
?缺點:慢祥款,占用資源清笨,不適用于高并發(fā)場景

worker MPM

worker MPM:是一種多進程和多線程混合的模型,有一個控制進程刃跛,啟動多個子進程抠艾,每個子進程里面包含固定的線程,使用線程程來處理請求奠伪,當線程不夠使用的時候會再啟動一個新的子進程跌帐,然后在進程里面再啟動線程處理請求,由于其使用了線程處理請求绊率,因此可以承受更高的并發(fā)谨敛。
?優(yōu)點:相比prefork 占用的內(nèi)存較少,可以同時處理更多的請求
?缺點:使用keep-alive的長連接方式滤否,某個線程會一直被占據(jù)脸狸,即使沒有傳輸數(shù)據(jù),也需要一直等待到超時才會被釋放藐俺。如果過多的線程炊甲,被這樣占據(jù),也會導(dǎo)致在高并發(fā)場景下的無服務(wù)線程可用欲芹。(該問題在prefork模式下卿啡,同樣會發(fā)生)

event MPM

event MPM:Apache中最新的模式,屬于事件驅(qū)動模型(epoll)菱父,每個進程響應(yīng)多個請求颈娜,在現(xiàn)在版本里的已經(jīng)是穩(wěn)定可用的模式剑逃。它和worker模式很像,最大的區(qū)別在于官辽,它解決了keep-alive場景下蛹磺,長期被占用的線程的資源浪費問題(某些線程因為被keep-alive,空掛在哪里等待同仆,中間幾乎沒有請求過來萤捆,甚至等到超時)。eventMPM中俗批,會有一個專門的線程來管理這些keep-alive類型的線程俗或,當有真實請求過來的時候,將請求傳遞給服務(wù)線程扶镀,執(zhí)行完畢后蕴侣,又允許它釋放。這樣增強了高并發(fā)場景下的請求處理能力

? event只在有數(shù)據(jù)發(fā)送的時候才開始建立連接臭觉,連接請求才會觸發(fā)工作線程,即使用了TCP的一個選項辱志,叫做延遲接受連接TCP_DEFER_ACCEPT蝠筑,加了這個選項后,若客戶端只進行TCP連接揩懒,不發(fā)送請求什乙,則不會觸發(fā)Accept操作,也就不會觸發(fā)工作線程去干活已球,進行了簡單的防攻擊(TCP連接)

? 優(yōu)點:單線程響應(yīng)多請求臣镣,占據(jù)更少的內(nèi)存,高并發(fā)下表現(xiàn)更優(yōu)秀智亮,會有一個專門的線程來管理keep-alive類型的線程忆某,當有真實請求過來的時候,將請求傳遞給服務(wù)線程阔蛉,執(zhí)行完畢后弃舒,又允許它釋放
? 缺點:沒有線程安全控制

5 httpd 配置

5.1 軟件安裝:

[root@localhost ~]#?yum install httpd
[root@localhost ~]# ll /etc/httpd
total 0
drwxr-xr-x. 2 root root? 37 Oct? 3 15:10 conf
drwxr-xr-x. 2 root root? 82 Oct? 3 15:10 conf.d
drwxr-xr-x. 2 root root 146 Oct? 3 15:10 conf.modules.d
lrwxrwxrwx. 1 root root? 19 Oct? 3 15:10 logs -> ../../var/log/httpd
lrwxrwxrwx. 1 root root? 29 Oct? 3 15:10 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx. 1 root root? 10 Oct? 3 15:10 run -> /run/httpd

5.2 http 配置文件

配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf

httpd服務(wù)程序的配置信息被寫到??/etc/httpd/conf.d/xxx.conf 這樣的文件中,其實也就等于寫在主配置文件 /etc/httpd/conf/httpd.conf里状原。
因為這寫文件在httpd主配置文件生效的時候聋呢,就已經(jīng)被加載進來了。

vim /etc/httpd/conf/httpd.conf
打開主配置文件颠区,按下G進入尾行削锰,我們看到
# Supplemental configuration
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
這表示,包含相對目錄conf.d下毕莱,所有以.conf后綴的配置文件的信息器贩。


備份重要配置文件:
[root@localhost ~]# cp /etc/httpd/conf/httpd.conf{,.bak}
[root@localhost ~]# cd /etc/httpd/conf/
[root@localhost conf]# ll
total 40-rw-r--r--. 1 root root 11753 Aug? 2? 2017 httpd.conf
-rw-r--r--. 1 root root 11753 Oct? 3 19:27 httpd.conf.bak
-rw-r--r--. 1 root root 13077 Aug? 4? 2017 magic

站點網(wǎng)頁文檔根目錄:

/var/www/html


5.3 http 常見配置

httpd 配置文件主要組成:
配置格式:directive value
directive 不區(qū)分字符大小寫
value 為路徑時颅夺,是否區(qū)分大小寫,取決于文件系統(tǒng)


5.3.1 修改監(jiān)聽的IP和Port

vim /etc/httpd/conf/httpd.conf

格式:
Listen [IP:]PORT

[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# ss -ntl? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 查看端口是否處于監(jiān)聽狀態(tài)

[root@localhost html]# curl -I http://192.168.38.141
HTTP/1.1 200 OK
Date: Thu, 03 Oct 2019 12:17:15 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 03 Oct 2019 12:16:36 GMT
ETag: "15-594008e92cec0"
Accept-Ranges: bytes
Content-Length: 21
Content-Type: text/html; charset=UTF-8

5.3.2 顯示服http 常見配置務(wù)器版本信息

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

This directive controls whether?Server?response header field which is sent back to clients includes a description of the generic OS-type of the server as well as information about compiled-in modules.

ServerTokens Full?(or not specified)
Server sends (e.g.):?Server: Apache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2

ServerTokens Prod[uctOnly]
Server sends (e.g.):?Server: Apache

ServerTokens Major
Server sends (e.g.):?Server: Apache/2

ServerTokens Minor
Server sends (e.g.):?Server: Apache/2.4

ServerTokens Min[imal]
Server sends (e.g.):?Server: Apache/2.4.2

ServerTokens OS
Server sends (e.g.):?Server: Apache/2.4.2 (Unix)


5.3.3 持久連接

Persistent Connection:連接建立磨澡,每個資源獲取完成后不會斷開連接碗啄,而是繼續(xù)等待其它的請求完成,默認關(guān)閉持久連接
斷開條件:時間限制:以秒為單位稳摄, 默認5s稚字,httpd-2.4 支持毫秒級
副作用:對并發(fā)訪問量大的服務(wù)器,持久連接會使有些請求得不到響應(yīng)
折衷:使用較短的持久連接時間


設(shè)置:KeepAlive On|Off
? ? ? ? ? ?KeepAliveTimeout 15

測試:
telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP


5.3.4 DSO: Dynamic Shared Object

加載動態(tài)模塊配置厦酬,不需重啟即生效
/etc/httpd/conf/httpd.conf
Include conf.modules.d/*.conf

配置指定實現(xiàn)模塊加載格式:
LoadModule <mod_name> <mod_path>

模塊文件路徑可使用相對路徑:相對于ServerRoot(默認/etc/httpd)
示例:LoadModule auth_basic_module modules/mod_auth_basic.so

? 動態(tài)模塊路徑: /usr/lib64/httpd/modules/

? 查看靜態(tài)編譯的模塊
httpd -l

? 查看靜態(tài)編譯及動態(tài)裝載的模塊
httpd –M


5.3.5? MPM( Multi-Processing Module)多路處理模塊

prefork, worker, event

切換使用的MPM
/etc/httpd/conf.modules.d/00-mpm.conf
啟用要啟用的MPM相關(guān)的LoadModule指令即可


[root@localhost ~]# cat /etc/httpd/conf.modules.d/00-mpm.conf

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#LoadModule mpm_event_module modules/mod_mpm_event.so

5.3.6 定義main server?文檔頁面路徑

DocumentRoot “/path”

[root@localhost html]# vi /etc/httpd/conf/httpd.conf

# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.#

DocumentRoot "/var/www/html"


5.3.7定義站點主頁面

[root@localhost html]# vi /etc/httpd/conf/httpd.conf

# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
<IfModule dir_module>
?DirectoryIndex index.html
</IfModule>


5.3.8?站點訪問控制常見機制

可基于兩種機制指明對哪些資源進行何種訪問控制
訪問控制機制有兩種:客戶端來源地址胆描,用戶賬號

<Directory>中“基于源地址”實現(xiàn)訪問控制
Options:后跟1個或多個以空白字符分隔的選項列表
在選項前的+,- 表示增加或刪除指定選項
常見選項:
Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源文件時仗阅,返回索引列表給用戶
FollowSymLinks:允許訪問符號鏈接文件所指向的源文件
None:全部禁用
All: 全部允許

舉例昌讲;

[root@localhost conf.d]# cat testhttp.conf
<Directory "/var/wwwi/html">
? Require all granted
options Indexes
</Directory>

AllowOverride與訪問控制相關(guān)的哪些指令可以放在指定目錄下的.htaccess(由AccessFileName指定)文件中,覆蓋之前的配置指令

只對<directory>語句有效
AllowOverride All: .htaccess中所有指令都有效
AllowOverride None: .htaccess 文件無效
AllowOverride AuthConfig .htaccess 文件中减噪,除了AuthConfig 其它指令都無法生效


[root@localhost html]# cat .htaccess
Options FollowSymLinks

[root@localhost html]# cat /etc/httpd/conf/httpd.conf? ?//對短绸。ht文件的訪問進行限制
<Files ".ht*">
Require all denied
</Files>

[root@localhost conf.d]# cat testhttp.conf
<Directory "/var/wwwi/html">
?Require all granted
AllowOverride All
</Directory>


基于IP的訪問控制:
無明確授權(quán)的目錄,默認拒絕
允許所有主機訪問:Require all granted
拒絕所有主機訪問:Require all denied
控制特定的IP訪問:
Require ip IPADDR:授權(quán)指定來源的IP訪問
Require not ip IPADDR:拒絕特定的IP訪問

控制特定的主機訪問:

Require host HOSTNAME:授權(quán)特定主機訪問
Require not host HOSTNAME:拒絕


舉例:.conf文件拒絕訪問

不能有失敗筹裕,至少有一個成功匹配才成功醋闭,即失敗優(yōu)先

<RequireAll>
Require all granted
Require not ip 172.16.1.1 拒絕特定IP
</RequireAll>

?多個語句有一個成功,則成功朝卒,即成功優(yōu)先

<RequireAny>
Require all denied
require ip 172.16.1.1 允許特定IP
</RequireAny>

舉例:



5.3.9 日志:

日志類型:
訪問日志
錯誤日志

[root@localhost html]# ls /etc/httpd/logs/
access_log? error_log
[root@localhost httpd]# ll -d /etc/httpd/logs

lrwxrwxrwx. 1 root root 19 Oct? 3 22:03 /etc/httpd/logs -> ../../var/log/httpd

[root@localhost logs]# cd /var/log/httpd/
[root@localhost httpd]# ll
-rw-r--r--. 1 root root 250094 Oct? 8 22:16 access_log
-rw-r--r--. 1 root root? 10425 Oct? 8 22:15 error_log


5.3.10定義路徑別名

格式:Alias /URL/ "/PATH/"


5.3.11 基于用戶的訪問控制

? 認證質(zhì)詢:WWW-Authenticate:響應(yīng)碼為401证逻,拒絕客戶端請求,并說明要求客戶端提供賬號和密碼

? 認證:Authorization:客戶端用戶填入賬號和密碼后再次發(fā)送請求報文抗斤;認證通過時囚企,則服務(wù)器發(fā)送響應(yīng)的資源

? 認證方式兩種:

basic:明文
digest:消息摘要認證,兼容性差

? 安全域:需要用戶認證后方能訪問的路徑;應(yīng)該通過名稱對其進行標識瑞眼,以便于知用戶認證的原因
? 用戶的賬號和密碼

虛擬賬號:僅用于訪問某服務(wù)時用到的認證標識存儲:文本文件龙宏,SQL數(shù)據(jù)庫,ldap目錄存儲负拟,nis等

提供賬號和密碼存儲(文本文件)
使用專用命令完成此類文件的創(chuàng)建及用戶管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c 自動創(chuàng)建文件烦衣,僅應(yīng)該在文件不存在時使用
-p 明文密碼
-d CRYPT格式加密,默認
-m md5格式加密
-s sha格式加密
-D 刪除指定用戶

舉例:

basic認證配置示例:

方法1

在/etc/http/conf.d 下創(chuàng)建保存用戶密碼的文檔httpuser(文件名字自定義)

root@localhost conf.d]# htpasswd -c httpuser bob
New password:
Re-type new password:
Adding password for user bob

[root@localhost conf.d]# htpasswd? httpuser alice
New password:
Re-type new password:
Adding password for user alice

[root@localhost conf.d]# ll

total 24
-rw-r--r--. 1 root root 2926 Aug? 4? 2017 autoindex.conf
-rw-r--r--. 1 root root? ? 0 Oct? 8 09:12 cat
-rw-r--r--. 1 root root? 86 Oct? 9 21:15 httpuser
-rw-r--r--. 1 root root? 366 Aug? 4? 2017 README
-rw-r--r--. 1 root root? 172 Oct? 9 20:49 test2.conf
-rw-r--r--. 1 root root 1252 Aug? 2? 2017 userdir.conf
-rw-r--r--. 1 root root? 824 Aug? 2? 2017 welcome.conf

[root@localhost conf.d]# cat httpuser
bob:$apr1$K.EznJdk$HNxgjFrGRCpm/YTkJbNA7/
alice:$apr1$XY32GHVl$d89ieqA8VDc/HjJwRUDCV0

定義安全域
[root@localhost conf.d]# cat test2.conf

<Directory /var/www/html/admin>
AuthType Basic
AuthName "Admin Page"
AuthUserFile "/etc/httpd/conf.d/httpuser"
Require user alice

#Require valid-user? ?? 允許賬號文件中的所有用戶登錄
</Directory>

備注:/var/www/html/admin 下放置需要訪問的頁面

方法2:

[root@localhost conf.d]# cat test2.conf

<Directory /var/www/html/admin>
allowoveroride authconfig
</Directory>

[root@localhost conf.d]#? vim /var/www/html/admin/htaccess?

AuthType Basic
AuthName "Admin Page"
AuthUserFile "/etc/httpd/conf.d/httpuser"
Require user alice


驗證:https://192.168.38.141:8080/admin 彈出以下驗證掩浙,輸入密碼后花吟,正常顯示網(wǎng)頁

5.3.12 實現(xiàn)用戶家目錄的http共享

?基于模塊mod_userdir.so實現(xiàn)

?相關(guān)設(shè)置:
vim /etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
#UserDir disabled
UserDir public_html #指定共享目錄的名稱

</IfModule>

?準備目錄
su – wang;mkdir ~/public_html
setfacl –m u:apache:x ~wang

?訪問
http://localhost/~wang/index.html

5.3.13 ServerSignature On | Off | EMail

當客戶請求的網(wǎng)頁并不存在時,服務(wù)器將產(chǎn)生錯誤文檔厨姚,如果打開了ServerSignature選項衅澈,錯誤文檔的最后一行將包含服務(wù)器的名字、Apache的版本等信息谬墙,如果不對外顯示這些信息今布,就可以將這個參數(shù)設(shè)置為Off設(shè)置為Email经备,將顯示ServerAdmin 的Email提示

5.3.14 status頁面

[root@localhost ~]# httpd -M | grep status
status_module (shared)

配置文件增加如下配置:

<Location "/status">
SetHandler server-status
</Location>

驗證:http://192.168.38.141:8080/status 查看狀態(tài);


為保證安全性部默,需對登錄的ip 進行限制侵蒙,配置如下:

5.3.14 虛擬主機

有三種實現(xiàn)方案:
基于ip:為每個虛擬主機準備至少一個ip地址
基于port:為每個虛擬主機使用至少一個獨立的port
基于FQDN:為每個虛擬主機使用至少一個FQDN

[root@localhost ~]# cd /etc/httpd/conf.d/
[root@localhost conf.d]# mkdir /data
[root@localhost conf.d]# cd /data/
[root@localhost data]# mkdir {a,b,c}site
[root@localhost data]# echo www.a.com >asite/index.html
[root@localhost data]# echo www.b.com >bsite/index.html
[root@localhost data]# echo www.c.com >csite/index.html

舉例:基于IP 方案

[root@localhost conf.d]# vi test2.con

<VirtualHost 192.168.38.101:8080>
DocumentRoot "/etc/httpd/conf.d/data/asite"
<Directory "/etc/httpd/conf.d/data/asite">
Require all granted
</Directory>

</VirtualHost>
<VirtualHost 192.168.38.102:8080>
DocumentRoot "/etc/httpd/conf.d/data/bsite"
<Directory "/etc/httpd/conf.d/data/bsite">
Require all granted
</Directory>

</VirtualHost>
<VirtualHost 192.168.38.102:8080>
DocumentRoot "/etc/httpd/conf.d/data/csite"
<Directory "/etc/http/conf.d/data/csite">
Require all granted
</Directory>
</VirtualHost>

6 HTTPS

6.1 https 介紹

為解決安全問題,網(wǎng)景在1994年創(chuàng)建了HTTPS傅蹂,并應(yīng)用在網(wǎng)景導(dǎo)航者瀏覽器中纷闺。最初,HTTPS是與SSL一起使用的份蝴;在SSL逐漸演變到TLS時(其實兩個是一個東西犁功,只是名字不同而已),最新的HTTPS也由在2000年五月公布的RFC2818正式確定下來婚夫。HTTPS就是安全版的HTTP浸卦,目前大型網(wǎng)站基本實現(xiàn)全站HTTPS

?HTTPS協(xié)議需要到CA申請證書,一般免費證書很少案糙,需要交費
?HTTP協(xié)議運行在TCP之上限嫌,所有傳輸?shù)膬?nèi)容都是明文,HTTPS運行在SSL/TLS之上时捌,SSL/TLS運行在TCP之上萤皂,所有傳輸?shù)膬?nèi)容都經(jīng)過加密的
?HTTP和HTTPS使用的是不同的連接方式,端口不同匣椰,前者是80,后者是443
?HTTPS可以有效的防止運營商劫持端礼,解決了防劫持的一個大問題
?HTTPS 中的SSL握手等過程降低用戶訪問速度禽笑,但是只要經(jīng)過合理優(yōu)化和部署,HTTPS 對速度的影響完全可以接受

6.2 ssl

https:http over ssl

? SSL會話的簡化過程

(1) 客戶端發(fā)送可供選擇的加密方式蛤奥,并向服務(wù)器請求證書
(2) 服務(wù)器端發(fā)送證書以及選定的加密方式給客戶端
(3) 客戶端取得證書并進行證書驗證

如果信任給其發(fā)證書的CA
(a) 驗證證書來源的合法性佳镜;用CA的公鑰解密證書上數(shù)字簽名
(b) 驗證證書的內(nèi)容的合法性:完整性驗證
(c) 檢查證書的有效期限
(d) 檢查證書是否被吊銷
(e) 證書中擁有者的名字,與訪問的目標主機要一致

(4) 客戶端生成臨時會話密鑰(對稱密鑰)蟀伸,并使用服務(wù)器端的公鑰加密此數(shù)據(jù)發(fā)送給服務(wù)器,完成密鑰交換
(5) 服務(wù)用此密鑰加密用戶請求的資源缅刽,響應(yīng)給客戶端

6.3 https實現(xiàn)

? (1) 為服務(wù)器申請數(shù)字證書

測試:通過私建CA發(fā)證書
?(a) 創(chuàng)建私有CA
?(b) 在服務(wù)器創(chuàng)建證書簽署請求
?(c) CA簽證

? (2) 配置httpd支持使用ssl娜睛,及使用的證書
yum -y install mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf
DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile

? (3) 測試基于https訪問相應(yīng)的主機

openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfilefilename]

舉例: 軟件安轉(zhuǎn)ssl

[root@localhost conf.d]#
[root@localhost conf.d]# yum install mod_ssl

[root@localhost conf.d]# rpm -ql mod_ssl
/etc/httpd/conf.d/ssl.conf
/etc/httpd/conf.modules.d/00-ssl.conf
/usr/lib64/httpd/modules/mod_ssl.so
/usr/libexec/httpd-ssl-pass-dialog
/var/cache/httpd/ssl

[root@localhost conf.d]# systemctl restart httpd

[root@localhost conf.d]# ss -ntl

State? ? ? Recv-Q Send-Q Local Address:Port? ? ? ? ? ? ? Peer Address:Port? ? ? ? ? ? ?

LISTEN? ? 0? ? ? 128? ? 192.168.38.141:8080? ? ? ? ? ? ? ? ? ? *:*? ? ? ? ? ? ? ? ?
LISTEN? ? 0? ? ? 128? ? ? ? ? *:22? ? ? ? ? ? ? ? ? ? ? *:*? ? ? ? ? ? ? ? ?
LISTEN? ? 0? ? ? 100? ? 127.0.0.1:25? ? ? ? ? ? ? ? ? ? ? *:*? ? ? ? ? ? ? ? ?
LISTEN? ? 0? ? ? 128? ? ? ? :::22? ? ? ? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ?
LISTEN? ? 0? ? ? 100? ? ? ? ::1:25? ? ? ? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ?
LISTEN? ? 0? ? ? 128? ? ? ? :::443?

舉例:搭建CA

CA服務(wù)器:

生成私鑰
(umask 077; openssl genrsa -out private/cakey.pem 2048)

生成自簽名證書
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650? <<EOF

touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial

HTTPS 服務(wù)器:

[root@localhost conf.d]# mkdir ssl
[root@localhost conf.d]# pwd
/etc/httpd/conf.d
[root@localhost conf.d]# cd ssl

給web服務(wù)器生成私鑰
[root@localhost ssl]# (umask 066;openssl genrsa -out httpd.key)
Generating RSA private key, 2048 bit long modulus
..........................................................+++
.....................................................................................+++
-----

生成證書申請文件
[root@localhost ssl]# openssl req -new -key httpd.key -out httpd.cs

將證書請求文件傳輸給CA服務(wù)器
[root@localhost ssl]# scp /etc/httpd/conf.d/ssl/httpd.csr 192.168.38.142:/etc/pki/CA

CA服務(wù)器:

CA簽署證書,并將證書頒發(fā)給請求者

[root@localhost CA]# openssl ca -in /etc/pki/CA/httpd.csr -out /etc/pki/CA/certs/http.crt -days 100
[root@localhost CA]# scp /etc/pki/CA/certs/http.crt 192.168.38.141:/etc/httpd/conf.d/ssl/
[root@localhost CA]# scp /etc/pki/CA/cacert.pem 192.168.38.141:/etc/httpd/conf.d/ssl/

https 服務(wù)器修改配置文件
vim /etc/httpd/conf.d/ssl.conf
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key
SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt

[root@localhost ssl]# ll
-rw-r--r--. 1 root root 1424 Oct 10 19:15 cacert.pem
-rw-r--r--. 1 root root 4621 Oct 10 19:15 http.crt
-rw-r--r--. 1 root root 1054 Oct 10 19:03 httpd.csr
-rw-------. 1 root root 1679 Oct 10 19:01 httpd.key

6.4 將http請求轉(zhuǎn)發(fā)至https的URL

?重定向
Redirect [status] URL-path URL

?status狀態(tài):
?Permanent: 返回永久重定向狀態(tài)碼 301

?Temp:返回臨時重定向狀態(tài)碼302. 此為默認值
?示例:Redirect temp / https://www.magedu.com/


說明如下:

瀏覽器發(fā)起訪問http://www.a.com
服務(wù)器重定向信息;
瀏覽器發(fā)起https://ww.a.com,對服務(wù)器訪問



6.5 HSTS:HTTP Strict Transport Security

服務(wù)器端配置支持HSTS后涧团,會在給瀏覽器返回的HTTP首部中攜帶HSTS字段阿迈。瀏覽器獲取到該信息后甥角,會將所有HTTP訪問請求在內(nèi)部做307跳轉(zhuǎn)到HTTPS当犯。而無需任何網(wǎng)絡(luò)過程;

1)瀏覽器發(fā)起訪問http://www.a.com
2)服務(wù)器返回HSTS 字段以及重定向信息杈曲;
3)瀏覽器緩存收到的重定向信息,當有訪問http://www.a.com時直接調(diào)轉(zhuǎn)到https://ww.a.com,對服務(wù)器發(fā)起訪問

l



HSTS preload list

是Chrome瀏覽器中的HSTS預(yù)載入列表枢劝,在該列表中的網(wǎng)站蚕脏,使用Chrome瀏覽器訪問時挣棕,會自動轉(zhuǎn)換成HTTPS两曼。Firefox户辫、Safari苫幢、Edge瀏覽器也會采用這個列表

實現(xiàn)HSTS示例:

vim /etc/httpd/conf/httpd.conf
Header always set Strict-Transport-Security "max-age=31536000"
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]

7 HTTP 協(xié)議報文分析

7.1 HTTP請求報文


7.2 HTTP響應(yīng)報文


7.3 HTTP 語法

?request報文

<method> <request-URL> <version>
<headers>
<entity-body>

?response報文

<version> <status> <reason-phrase>
<headers>
<entity-body>

?method: 請求方法牢屋,標明客戶端希望服務(wù)器對資源執(zhí)行的動作

GET涮拗、HEAD、POST等

?version:
HTTP/<major>.<minor>

?status:
三位數(shù)字灌曙,如200留储,301, 302, 404, 502; 標記請求處理過程中發(fā)生的情況

?reason-phrase:
狀態(tài)碼所標記的狀態(tài)的簡要描述

?headers:
每個請求或響應(yīng)報文可包含任意個首部翼抠;每個首部都有首部名稱,后面跟一個冒號获讳,而后跟一個可選空格阴颖,接著是一個值

?entity-body:請求時附加的數(shù)據(jù)或響應(yīng)時附加的數(shù)據(jù)

Method 方法:

GET: 從服務(wù)器獲取一個資源
HEAD: 只從服務(wù)器獲取文檔的響應(yīng)首部
POST: 向服務(wù)器輸入數(shù)據(jù),通常會再由網(wǎng)關(guān)程序繼續(xù)處理
PUT: 將請求的主體部分存儲在服務(wù)器中丐膝,如上傳文件
DELETE: 請求刪除服務(wù)器上指定的文檔
TRACE: 追蹤請求到達服務(wù)器中間經(jīng)過的代理服務(wù)器
OPTIONS:請求服務(wù)器返回對指定資源支持使用的請求方法

7.4 http協(xié)議首部

?通用首部:請求報文和響應(yīng)報文兩方都會使用的首部
?請求首部:從客戶端向服務(wù)器端發(fā)送請求報文時使用的首部量愧。補充了請求的附加內(nèi)容、客戶端信息帅矗、請求內(nèi)容相關(guān)優(yōu)先級等信息
?響應(yīng)首部:從服務(wù)器端向客戶端返回響應(yīng)報文時使用的首部偎肃。補充了響應(yīng)的附加內(nèi)容,也會要求客戶端附加額外的內(nèi)容信息
?實體首部:針對請求報文和響應(yīng)報文的實體部分使用的首部浑此。補充了資源內(nèi)容更新時間等與實體有關(guān)的的信息
?擴展首部

7.4.1 通用首部:

Date: 報文的創(chuàng)建時間
Connection:連接狀態(tài)累颂,如keep-alive, close
Via:顯示報文經(jīng)過的中間節(jié)點(代理,網(wǎng)關(guān))
Cache-Control:控制緩存凛俱,如緩存時長
MIME-Version:發(fā)送端使用的MIME版本
Warning:錯誤通知

請求首部:

Accept:通知服務(wù)器自己可接受的媒體類型
Accept-Charset: 客戶端可接受的字符集
Accept-Encoding:客戶端可接受編碼格式喘落,如gzip
Accept-Language:客戶端可接受的語言
Client-IP: 請求的客戶端IP
Host: 請求的服務(wù)器名稱和端口號
Referer:跳轉(zhuǎn)至當前URI的前一個URL
User-Agent:客戶端代理,瀏覽器版本

條件式請求首部:

Expect:允許客戶端列出某請求所要求的服務(wù)器行為
If-Modified-Since:自從指定的時間之后最冰,請求的資源是否發(fā)生過修改
If-Unmodified-Since:與上面相反
If-None-Match:本地緩存中存儲的文檔的ETag標簽是否與服務(wù)器文檔的
Etag不匹配
If-Match:與上面相反

?安全請求首部:

Authorization:向服務(wù)器發(fā)送認證信息,如賬號和密碼
Cookie: 客戶端向服務(wù)器發(fā)送cookie

?代理請求首部:
Proxy-Authorization: 向代理服務(wù)器認證

7.4.2 響應(yīng)首部:

?信息性:

Age:從最初創(chuàng)建開始稀火,響應(yīng)持續(xù)時長
Server:服務(wù)器程序軟件名稱和版本

?協(xié)商首部:某資源有多種表示方法時使用
Accept-Ranges:服務(wù)器可接受的請求范圍類型
Vary:服務(wù)器查看的其它首部列表

?安全響應(yīng)首部:
Set-Cookie:向客戶端設(shè)置cookie
WWW-Authenticate:來自服務(wù)器對客戶端的質(zhì)詢列表

7.4.3 實體首部:

Allow: 列出對此資源實體可使用的請求方法
Location:告訴客戶端真正的實體位于何處
Content-Encoding:對主體執(zhí)行的編碼
Content-Language:理解主體時最適合的語言
Content-Length: 主體的長度
Content-Location: 實體真正所處位置
Content-Type:主體的對象類型暖哨,如text

緩存相關(guān):
ETag:實體的擴展標簽
Expires:實體的過期時間
Last-Modified:最后一次修改的時間

7.4.4 解決http協(xié)議無狀態(tài)方法

7.4.4.1 cookie

HTTP 是一種無狀態(tài)協(xié)議。協(xié)議自身不對請求和響應(yīng)之間的通信狀態(tài)進行保存也就是說在 HTTP 這個級別篇裁,協(xié)議對于發(fā)送過的請求或響應(yīng)都不做持久化處理沛慢。這是為了更快地處理大量事務(wù),確保協(xié)議的可伸縮性达布,而特意把 HTTP 協(xié)議設(shè)計成如此簡單的团甲。可是隨著 Web 的不斷發(fā)展黍聂,很多業(yè)務(wù)都需要對通信狀態(tài)進行保存躺苦。于是引入了 Cookie 技術(shù)。使用 Cookie 的狀態(tài)管理Cookie 技術(shù)通過在請求和響應(yīng)報文中寫入 Cookie 信息來控制客戶端的狀態(tài)产还。Cookie 會根據(jù)從服務(wù)器端發(fā)送的響應(yīng)報文內(nèi)的一個叫做 Set-Cookie 的首部字段信息匹厘,通知客戶端保存Cookie。當下次客戶端再往該服務(wù)器發(fā)送請求時脐区,客戶端會自動在請求報文中加入 Cookie 值后發(fā)送出去愈诚。服務(wù)器端發(fā)現(xiàn)客戶端發(fā)送過來的 Cookie 后替久,會去檢查究竟是從哪一個客戶端發(fā)來的連接請求地沮,然后對比服務(wù)器上的記錄,最后得到之前的狀態(tài)信息购撼;



Set-cookie首部字段示例:
Set-Cookie: status=enable; expires=Fri, 24 Nov 2017 20:30:02 GMT;path=/;

?NAME=VALUE 賦予 Cookie 的名稱和其值,此為必需項
?expires=DATE Cookie 的有效期媒佣,若不明確指定則默認為瀏覽器關(guān)閉前為止
?path=PATH 將服務(wù)器上的文件目錄作為Cookie的適用對象匕累,若不指定則默認為文檔所在的文件目錄
?domain=域名 作為 Cookie 適用對象的域名,若不指定則默認為創(chuàng)建Cookie的服務(wù)器的域名
?Secure 僅在 HTTPS 安全通信時才會發(fā)送 Cookie
?HttpOnly 加以限制使 Cookie 不能被 JavaScript 腳本訪問

7.4.4.2cookie vs session

session和cookie的作用有點類似丈攒,都是為了存儲用戶相關(guān)的信息哩罪。不同的是,cookie是存儲在本地瀏覽器巡验,而session存儲在服務(wù)器际插。存儲在服務(wù)器的數(shù)據(jù)會更加的安全,不容易被竊取显设。但存儲在服務(wù)器也有一定的弊端框弛,就是會占用服務(wù)器的資源;

通過cookie存儲一個session_id,然后具體的數(shù)據(jù)則是保存在session中捕捂。如果用戶已經(jīng)登錄瑟枫,則服務(wù)器會在cookie中保存一個session_id,下次再次請求的時候指攒,會把該session_id攜帶上來慷妙,服務(wù)器根據(jù)session_id在session庫中獲取用戶的session數(shù)據(jù)。就能知道該用戶到底是誰允悦,以及之前保存的一些狀態(tài)信息

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膝擂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌架馋,老刑警劉巖狞山,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叉寂,居然都是意外死亡萍启,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門屏鳍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勘纯,“玉大人,你說我怎么就攤上這事孕蝉÷怕桑” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵降淮,是天一觀的道長超埋。 經(jīng)常有香客問我,道長佳鳖,這世上最難降的妖魔是什么霍殴? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮系吩,結(jié)果婚禮上来庭,老公的妹妹穿的比我還像新娘。我一直安慰自己穿挨,他們只是感情好月弛,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著科盛,像睡著了一般帽衙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贞绵,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天厉萝,我揣著相機與錄音,去河邊找鬼榨崩。 笑死谴垫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的母蛛。 我是一名探鬼主播翩剪,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼彩郊!你這毒婦竟也來了前弯?” 一聲冷哼從身側(cè)響起舞肆,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎博杖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筷登,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡剃根,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了前方。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狈醉。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惠险,靈堂內(nèi)的尸體忽然破棺而出苗傅,到底是詐尸還是另有隱情,我是刑警寧澤班巩,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布渣慕,位于F島的核電站,受9級特大地震影響抱慌,放射性物質(zhì)發(fā)生泄漏逊桦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一抑进、第九天 我趴在偏房一處隱蔽的房頂上張望强经。 院中可真熱鬧,春花似錦寺渗、人聲如沸匿情。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炬称。三九已至,卻和暖如春鸡号,著一層夾襖步出監(jiān)牢的瞬間转砖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工鲸伴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留府蔗,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓汞窗,卻偏偏與公主長得像姓赤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子仲吏,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • http協(xié)議及Apache服務(wù) http協(xié)議 什么是http? http全稱為超文件傳輸協(xié)議(Hyper text...
    魏鎮(zhèn)坪閱讀 2,270評論 0 1
  • httpd相關(guān): httpd程序版本: 不铆。1.3 停止維護 蝌焚。2.0 。 2.2 event為測試使用 誓斥。 2.4...
    ckhzw閱讀 397評論 0 0
  • 系統(tǒng)安裝過程 MBR:isolinux/boot.cat stage2: isolinux/isolinux.bi...
    毛利卷卷發(fā)閱讀 731評論 0 1
  • I/O模型: 阻塞型只洒、非阻塞型、復(fù)用型劳坑、信號驅(qū)動型毕谴、異步 同步/異步:關(guān)注消息通知機制 消息通知:同步:等待對方返...
    Net夜風閱讀 2,008評論 0 1
  • 交朋友對于性格開朗的人來說根本不是問題,但是交到志同道合的朋友就不那么容易了距芬,很幸運涝开,我就是一個能簡單就能交到志...
    c46a17ae3418閱讀 358評論 0 0