詳解HTTP協議與服務

**************************************************html

1、Http協議簡介
web

2、Http協議特色數據庫

3、Http版本介紹apache

4、Http之URL(統一資源定位符)vim

5、HTTP請求報文與響應報文
瀏覽器

**************************************************緩存




1、Http協議簡介安全

HTTP協議是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的鏈接方式,HTTP1.1版本中給出一種持續鏈接的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。



HTTP在TCP協議中的位置,以下圖所示:
bash

2、Http協議特色服務器

  • 支持客戶/服務器模式(C/S模式)

  • 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。


  • 靈活:  HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

  • 無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。

  • 無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。


3、Http版本介紹

HTTP目前有三個版本:HTTP0.九、HTTP1.0、HTTP1.1。

  • HTTP0.9是最先的版本 ,它僅能響應文本

  • HTTP1.0開始引用MIME(多功能多用途互聯網郵件擴展)技術,smtp發送郵件的時候攜帶非文本數據,引用保存鏈接技術(keep——alive),引用緩存機制;

  • HTTP1.1更多的請求方法,更精細的緩存控制(條件式存儲方式),持久鏈接(persistent connection),目前被普遍的使用。

HTTP1.0與HTTP1.1對比:

 在HTTP1.0,單一TCP鏈接內僅執行一個「客戶端發送請求—服務器發送應答」週期,以後釋放TCP鏈接。在HTTP1.1優化支持持續活躍鏈接:客戶端連續屢次發送請求、接收應答;批量多請求時,同一TCP鏈接在活躍(Keep-Live)間期內複用,避免重複TCP初始握手活動,減小網絡符合和響應週期。


4、Http之URL(統一資源定位符)

URL 的通常形式是:

<URL的訪問方式>://<主機>:<端口>/<abs_path>

URL的訪問方式有:

1.ftp —— 文件傳送協議 FTP

2.http —— 超文本傳送協議HTTP

3.https —— 用安全套接字層傳送的超文本傳輸協議

4.file —— 當地電腦或網上分享的文件


host表示合法的Internet主機域名或者IP地址;port指定一個端口號,爲空則使用缺省端口80;abs_path指定請求資源的URI;若是URL中沒有給出abs_path,那麼當它做爲請求URI時,必須以「/」的形式給出,一般這個工做瀏覽器自動幫咱們完成。
eg:
輸入:www.google.com.hk

瀏覽器自動轉換成:http://www.google.com.hk/


5、HTTP請求報文與響應報文

Http請求報文

一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行請求數據4個部分組成,下圖給出了請求報文的通常格式:


1.請求頭

請求行由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔。例如,

GET /index.html  HTTP/1.1。

HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

1)、GET

最多見的一種請求方式,當客戶端要從服務器中讀取文檔時,當點擊網頁上的連接或者經過在瀏覽器的地址欄輸入網址來瀏覽網頁的,使用的都是GET方式。GET方法要求服務器將URL定位的資源放在響應報文的數據部分,回送給客戶端。使用GET方法時,請求參數和對應的值附加在URL後面,利用一個問號(「?」)表明URL的結尾與請求參數的開始,傳遞參數長度受限制

客戶端請求

[root@localhost ~]# telnet www.google.com.hk 80
Trying 74.125.128.199...
Connected to www.google.com.hk.
Escape character is '^]'.
GET / HTTP/1.1
HOST:www.google.com.hk

(末尾有一個空行。第一行指定方法、資源路徑、協議版本;第二行是在1.1版裏必帶的一個header做用指定主機)

服務器響應:

HTTP/1.1 200 OK
Date: Thu, 22 Aug 2013 14:06:47 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=Big5
Set-Cookie: PREF=ID=191d6c8d0bb04095:FF=0:NW=1:TM=1377180407:LM=1377180407:S=u8OwwZ_w0a5YzJLT; expires=Sat, 22-Aug-2015 14:06:47 GMT; path=/; domain=.google.com.hk
Set-Cookie: NID=67=Jb4v4isJQXT_4WKdwNqVJfT2nJwzArUy_lHzpCYbs5hTAKyFj6-EUAS3Tk5E5r-axhTXuvwGDKP0JZ5DEM8ReCJ3OhTREoJwioqfDWBMrNlg99jGQBBwBa9BZqbeSwKd; expires=Fri, 21-Feb-2014 14:06:47 GMT; path=/; domain=.google.com.hk; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Alternate-Protocol: 80:quic
Transfer-Encoding: chunked


2).POST

使用POST方法能夠容許客戶端給服務器提供信息較多。POST方法將請求參數封裝在HTTP請求數據中,以名稱/值的形式出現,能夠傳輸大量數據,這樣POST方式對傳送的數據大小沒有限制,並且也不會顯示在URL中。

3).HEAD

HEAD就像GET,只不過服務端接受到HEAD請求後只返回響應頭,而不會發送響應內容。當咱們只須要查看某個頁面的狀態的時候,使用HEAD是很是高效的,由於在傳輸的過程當中省去了頁面內容。

4).PUT

 上傳資源(不安全)

5).DELETE

  刪除資源(不安全)

6).OPTIONS

   返回請求的資源所支持請求方法的方法(客戶端不知道服務器所支持的方法,須要服務器返回所支持的方法)

7).TRACE

  追蹤一次資源請求中間所通過的代理服務器


2.請求頭部

請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號「:」分隔。請求頭部通知服務器有關於客戶端請求的信息,典型的請求頭有:

User-Agent:產生請求的瀏覽器類型。

Accept:客戶端可識別的內容類型列表。

Host:請求的主機名,容許多個域名同處一個IP地址,即虛擬主機。

3.空行

最後一個請求頭以後是一個空行,發送回車符和換行符,通知服務器如下再也不有請求頭。

4.請求數據

請求數據不在GET方法中使用,而是在POST方法中使用。POST方法適用於須要客戶填寫表單的場合。與請求數據相關的最常使用的請求頭是Content-Type和Content-Length。

HTTP響應報文

HTTP響應也由三個部分組成,分別是:狀態行、消息報頭、響應正文。

以下所示,HTTP響應的格式與請求的格式十分相似:

<status-line>

<headers>

<blank line>

[<response-body>]

正如所見,在響應中惟一真正的區別在於第一行中用狀態信息代替了請求信息。狀態行(status line)經過提供一個狀態碼來講明所請求的資源狀況。

 狀態行格式以下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值。

  • 1xx:指示信息--表示請求已接收,繼續處理。

  • 2xx:成功--表示請求已被成功接收、理解、接受。

  • 3xx:重定向--要完成請求必須進行更進一步的操做。

  • 4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現。

  • 5xx:服務器端錯誤--服務器未能實現合法的請求。

常見狀態代碼、狀態描述的說明以下。

  • 200 OK:客戶端請求成功。

  • 301:永久重定向, Location響應首部的值仍爲當前URL,所以爲隱藏重定向;

  • 302 :臨時重定向,顯式重定向, Location響應首部的值爲新的URL

  • 400 Bad Request:客戶端請求有語法錯誤,不能被服務器所理解。

  • 401 Unauthorized:請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用。

  • 403 Forbidden:服務器收到請求,可是拒絕提供服務。

  • 404 Not Found:請求資源不存在,舉個例子:輸入了錯誤的URL。

  • 500 Internal Server Error:服務器發生不可預期的錯誤。

  • 503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間後可能恢復正常。

  • 504 Gateway Timeouteg: 服務器找不到網關服務器




*************************************************  

1、Apache簡介

2、Apache版本介紹

3、Apache工做模式

4、Http服務器的安裝於配置

**************************************************




1、Apache簡介  

 Web服務器軟件有Apache,Tomcat,IIS,Nginx 等,因爲 Apache是世界使用排名第一的Web服務器軟件。它能夠運行在幾乎全部普遍使用的計算機平臺上,因爲其跨平臺和安全性被普遍使用,是最流行的Web服務器端軟件之一,因此咱們在這裏詳細介紹Apacehe服務器軟件


2、Apache版本介紹

  • httpd-1.3  :很穩定可是官方已經不維護了

  • httpd-2.0  :經常使用版本

  • httpd-2.2 :目前使用最廣的版本

  • httpd-2.4 :最新版本(引用了許多新特性)


3、Apache工做模式

  • Prefork工做模式:

   特色:一個進程響應一個客戶端請求,prefork用單獨的子進程來處理不一樣的請求,進程之間是彼此獨立的,這也使其成爲最穩定的MPM之一。

  • Worker工做模式:

   特色:主進程產生子進程,一個子進程產生多個線程,每一個線程響應一個請求,各個線程獨立的處理請求。

  • Event:(在HTTP-V2.4版本引用了此模式,在V2.2是做爲測試模塊)

   事件驅動模式


4、Apache的安裝於配置

yum installhttpd -y


  • HTTP的相關信息:

   服務腳本:/etc/rc.d/init.d/httpd

   運行目錄:/etc/httpd

   配置文件:/etc/httpd/conf/

   主配置文件:httpd.conf

   擴展配置:/etc/httpd/conf.d/*.conf

   網頁文件目錄(DocumentRoot):/var/www/html


  • 詳解Apache主配置文件的經常使用選項

  [root@localhost conf.d]# vim /etc/httpd/conf/httpd.conf

ServerRoot "/etc/httpd"#軟件安裝目錄
PidFile run/httpd.pid                   #指定pid文件
KeepAlive Off                           #關閉永久鏈接
MaxKeepAliveRequests 100                #最多客戶端鏈接數
KeepAliveTimeout 15                     #客戶端超時時間
<IfModule prefork.c>                    #prefork模式
StartServers       8                    #開機啓動的進程
MinSpareServers    5                    #最小空閒進程數
MaxSpareServers   20                    #最大空閒進程數
ServerLimit      256                    #單個進程的最大併發量
MaxClients       256                    #單個進程容許鏈接的客戶端數
MaxRequestsPerChild  4000               #單個進程最大處理請求數
</IfModule>
<IfModule worker.c>                     #work工做模式
StartServers         4                  #開機啓動的進程數
MaxClients         300                  #最大客戶端數
MinSpareThreads     25                  #最小空閒線程數
MaxSpareThreads     75                  #最大空閒線程數
ThreadsPerChild     25                  #每進程最多產生多少線程
MaxRequestsPerChild  0                  #每一個子進程在其生存期內容許伺服的最大請求數量
</IfModule>
Listen 80                               #監聽端口
User apache                             #以apache用戶身份運行
Group apache                            #以apache組的身份運行
DocumentRoot "/website"#指定網站的站點(此處修改成/website)
<Directory /website>                    #定義站點的權限
Options none         
AllowOverride None
Order allow,deny
Allow from all
</Directory>
DirectoryIndex  index.html index.html.var
ErrorLog logs/error_log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b"common   #定義日子格式
LogFormat "%{Referer}i -> %U"referer
LogFormat "%{User-agent}i"agent
CustomLog logs/access_logcombined
ServerSignature On
Alias /icons/"/var/www/icons/"#定義別名
<Directory "/var/www/icons">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<IfModule mod_dav_fs.c>
DAVLockDB /var/lib/dav/lockdb
</IfModule>
ScriptAlias /cgi-bin/"/var/www/cgi-bin/"#定義CGI別名
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

註釋:

    第4行:開啓永久鏈接功能之後,下面兩行才能生效

    第43行:服務器使用alias能夠隱藏站點,以提升網站的安全性

    第29行:定義站點的訪問權限

    第7-14行:設置perfork工做模式的屬性,此處能夠更具站點須要進行調優

    第15-23行:設置worker工做模式的屬性,此處能夠更具站點須要進行調優

    第22行:將MaxRequestsPerChild設置成非零值有兩個好處:

            能夠防止(偶然的)內存泄漏無限進行,從而耗盡內存。

            給進程一個有限壽命,從而有助於當服務器負載減輕的時候減小活動進程的數量。

一、網站訪問目錄的權限設置

<Directory "/var/www/html">              #默認網站存放目錄
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

註釋:

   第2行:Options:

                  Indexes: 索引文件(通常不是下載站點建議關閉此功能)

                  FollowSynLinks: 是否跟隨軟連接文件

                  ExecCGI:是否容許執行CGI腳本;

                  None:關閉全部功能

                  All:開啓全部功能

   第3行: AllowOverride None  是否容許覆蓋

   第4行: Orader  allow,deny  先拒絕後容許

   第5行:Allow from all 容許全部

經過以上對權限的說明,不知道你是否已經理解,下面咱們舉例說明一下。。

例1.

   僅拒絕172.16.0.0/16端的主機訪問/var/www/html

<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Deny  from 172.16.0.0/16
</Directory>

例2.

   拒絕172.16.1.1的主機訪問,容許172.16.0.0/16網端的主機訪問。

<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Deny from 172.16.1.1
Allow from  172.16.0.0/16
</Directory>


二、查看與修改默認工做模式

重啓httpd服務。。。

此時httpd已經切換到worker模式,可是worker模式不必定比prefork模式性能要強。穩定性相對要略一些。此時啓用與不啓用依據環境而定。正如適合本身的纔是最好的。。


三、站點別名設置

  • HTTP服務器設置

注意xiaodong這個目錄不須要創建

  • 客戶端驗證


設置別名能夠有效隱藏站點目錄,能夠提升安全性。


四、基於SSL的虛擬主機配置

1)、創建CA服務器(用戶頒發證書)

  • 生成CA的私鑰

[root@stu10 CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
..................+++
............................................................................................................................................................................................................+++
e is 65537 (0x10001)


  • 爲CA生成自簽證書

  • 創建序列號文件和數據庫文件  

1
2
3
[root@localhost CA]# touch serial index.txt
[root@localhost CA]# echo 01 > serial
[root@localhost CA]#

至此CA建立完成,咱們就能夠爲客戶端頒發證書了


2)、客戶端配置

  • 生成私鑰

[root@stu10 ~]# (umask 077; openssl genrsa -out /key/httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
.........................................................................................+++
..+++
e is 65537 (0x10001)
[root@stu10 ~]#


  •  製做一個證書籤署請求:



  • CA 簽署證書


3)、 安裝ssl模塊

[root@stu10 htdoc]# yum install mod_ssl -y
[root@stu10 htdoc]# rpm -ql mod_ssl
/etc/httpd/conf.d/ssl.conf
/usr/lib64/httpd/modules/mod_ssl.so
/var/cache/mod_ssl
/var/cache/mod_ssl/scache.dir
/var/cache/mod_ssl/scache.pag
/var/cache/mod_ssl/scache.sem
[root@stu10 htdoc]#


4)、服務器配置


[root@stu10 CA]# htpasswd -c -m /key/.htpass user1 #設置user1爲虛擬用戶
New password:                                #設置密碼
Re-type new password:                        #再次輸入密碼
Adding password for user user1
[root@stu10 htdoc]# vim /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>        #定義虛擬主機
DocumentRoot "/var/www/html"       #網站目錄
ServerName www.xiaodong.com:443    #定義主機名
<Directory "/var/www/html">
    Options None
    AllowOverride AuthConfig       #設置用戶認證
    AuthName "Only for employees." #認證名稱
    AuthType Basic                 #認證類型爲Basic
    AuthUserFile /key/.htpass      #指定用戶文件  
    Require valid-user             #指定虛擬用戶         
</Directory>
SSLCertificateFile /key/httpd.crt  #指定HTTP服務器證書文件
SSLCertificateKeyFile /key/httpd.key #指定HTTP服務器私鑰文件
[root@stu10 htdoc]# service httpd restart  #重啓服務


5)、客戶端驗證:

客戶端下載CA證書(/etc/pki/CA/cacert.pem ),並修改cacert.pem擴展名爲.crt ;安裝證書並訪問驗證




CA的建立過程若有疑惑能夠訪問http://xiaodong88.blog.51cto.com/1492564/1275878

本博客至此結束,望廣大博友多提寶貴意見!!!謝謝
相關文章
相關標籤/搜索