日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

爬虫 spider02——详析http

發(fā)布時(shí)間:2024/2/28 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫 spider02——详析http 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

HTTP協(xié)議

1.簡(jiǎn)介

HTTP協(xié)議(Hyper Text Transfer Protocol,超文本傳輸協(xié)議),是用于從萬(wàn)維網(wǎng)(WWW:World Wide Web )服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。

HTTP基于TCP/IP通信協(xié)議來(lái)傳遞數(shù)據(jù)。

HTTP基于客戶端/服務(wù)端(C/S)架構(gòu)模型,通過(guò)一個(gè)可靠的鏈接來(lái)交換信息,是一個(gè)無(wú)狀態(tài)的請(qǐng)求/響應(yīng)協(xié)議。

2.特點(diǎn)

(1)HTTP是無(wú)連接:無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶的請(qǐng)求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時(shí)間。

(2)HTTP是媒體獨(dú)立的:只要客戶端和服務(wù)器知道如何處理的數(shù)據(jù)內(nèi)容,任何類型的數(shù)據(jù)都可以通過(guò)HTTP發(fā)送。客戶端以及服務(wù)器指定使用適合的MIME-type內(nèi)容類型。

(3)HTTP是無(wú)狀態(tài):無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。

?

HTTP請(qǐng)求報(bào)文

HTTP請(qǐng)求報(bào)文由3部分組成(請(qǐng)求行+請(qǐng)求頭+請(qǐng)求體):

請(qǐng)求行

①是請(qǐng)求方法,GET和POST是最常見的HTTP方法,除此以外還包括DELETE、HEAD、OPTIONS、PUT、TRACE。

②為請(qǐng)求對(duì)應(yīng)的URL地址,它和報(bào)文頭的Host屬性組成完整的請(qǐng)求URL。

③是協(xié)議名稱及版本號(hào)。

請(qǐng)求頭:

④是HTTP的報(bào)文頭,報(bào)文頭包含若干個(gè)屬性,格式為“屬性名:屬性值”,服務(wù)端據(jù)此獲取客戶端的信息。

與緩存相關(guān)的規(guī)則信息,均包含在header中

請(qǐng)求體:

⑤是報(bào)文體,它將一個(gè)頁(yè)面表單中的組件值通過(guò)param1=value1?m2=value2的鍵值對(duì)形式編碼成一個(gè)格式化串,它承載多個(gè)請(qǐng)求參數(shù)的數(shù)據(jù)。不但報(bào)文體可以傳遞請(qǐng)求參數(shù),請(qǐng)求URL也可以通過(guò)類似于“/chapter15/user.html? param1=value1?m2=value2”的方式傳遞請(qǐng)求參數(shù)。?

?

HTTP請(qǐng)求報(bào)文頭屬性

Accept?
請(qǐng)求報(bào)文可通過(guò)一個(gè)“Accept”報(bào)文頭屬性告訴服務(wù)端 客戶端接受什么類型的響應(yīng)。?
如下報(bào)文頭相當(dāng)于告訴服務(wù)端,俺客戶端能夠接受的響應(yīng)類型僅為純文本數(shù)據(jù)啊,你丫別發(fā)其它什么圖片啊,視頻啊過(guò)來(lái),那樣我會(huì)歇菜的~~~

[javascript]?view plain?copy

  • Accept:text/plain???
  • Accept屬性的值可以為一個(gè)或多個(gè)MIME類型的值(描述消息內(nèi)容類型的因特網(wǎng)標(biāo)準(zhǔn), 消息能包含文本、圖像、音頻、視頻以及其他應(yīng)用程序?qū)S玫臄?shù)據(jù))

    cookie

    客戶端的Cookie就是通過(guò)這個(gè)報(bào)文頭屬性傳給服務(wù)端的哦!如下所示:

    [javascript]?view plain?copy

  • Cookie:?$Version=1;?Skin=new;jsessionid=5F4771183629C9834F8382E23???
  • 服務(wù)端是怎么知道客戶端的多個(gè)請(qǐng)求是隸屬于一個(gè)Session呢?注意到后臺(tái)的那個(gè)jsessionid = 5F4771183629C9834F8382E23木有?原來(lái)就是通過(guò)HTTP請(qǐng)求報(bào)文頭的Cookie屬性的jsessionid的值關(guān)聯(lián)起來(lái)的!(當(dāng)然也可以通過(guò)重寫URL的方式將會(huì)話ID附帶在每個(gè)URL的后面哦)。

    Referer
    表示這個(gè)請(qǐng)求是從哪個(gè)URL過(guò)來(lái)的,假如你通過(guò)google搜索出一個(gè)商家的廣告頁(yè)面,你對(duì)這個(gè)廣告頁(yè)面感興趣,鼠標(biāo)一點(diǎn)發(fā)送一個(gè)請(qǐng)求報(bào)文到商家的網(wǎng)站,這個(gè)請(qǐng)求報(bào)文的Referer報(bào)文頭屬性值就是http://www.google.com。

    Cache-Control

    對(duì)緩存進(jìn)行控制,如一個(gè)請(qǐng)求希望響應(yīng)返回的內(nèi)容在客戶端要被緩存一年,或不希望被緩存就可以通過(guò)這個(gè)報(bào)文頭達(dá)到目的。

    ?

    HTTP響應(yīng)報(bào)文

    HTTP的響應(yīng)報(bào)文也由三部分組成(響應(yīng)行+響應(yīng)頭+響應(yīng)體

    ?

    響應(yīng)行:

    ①報(bào)文協(xié)議及版本;?
    ②狀態(tài)碼及狀態(tài)描述;

    響應(yīng)頭:

    ③響應(yīng)報(bào)文頭,也是由多個(gè)屬性組成;

    響應(yīng)體:

    ④響應(yīng)報(bào)文體,即我們真正要的“干貨”

    響應(yīng)狀態(tài)碼?

    和請(qǐng)求報(bào)文相比,響應(yīng)報(bào)文多了一個(gè)“響應(yīng)狀態(tài)碼”,它以“清晰明確”的語(yǔ)言告訴客戶端本次請(qǐng)求的處理結(jié)果。?
    HTTP的響應(yīng)狀態(tài)碼由5段組成:

    • 1xx 消息,一般是告訴客戶端,請(qǐng)求已經(jīng)收到了,正在處理,別急...
    • 2xx 處理成功,一般表示:請(qǐng)求收悉、我明白你要的、請(qǐng)求已受理、已經(jīng)處理完成等信息.
    • 3xx 重定向到其它地方。它讓客戶端再發(fā)起一個(gè)請(qǐng)求以完成整個(gè)處理。
    • 4xx 處理發(fā)生錯(cuò)誤,責(zé)任在客戶端,如客戶端的請(qǐng)求一個(gè)不存在的資源,客戶端未被授權(quán),禁止訪問(wèn)等。
    • 5xx 處理發(fā)生錯(cuò)誤,責(zé)任在服務(wù)端,如服務(wù)端拋出異常,路由出錯(cuò),HTTP版本不支持等。

    以下是幾個(gè)常見的狀態(tài)碼:?
    200 OK?
    你最希望看到的,即處理成功!?
    303 See Other?
    我把你redirect到其它的頁(yè)面,目標(biāo)的URL通過(guò)響應(yīng)報(bào)文頭的Location告訴你。
    304 Not Modified?
    告訴客戶端,你請(qǐng)求的這個(gè)資源至你上次取得后,并沒(méi)有更改,你直接用你本地的緩存吧,我很忙哦,你能不能少來(lái)煩我啊!?
    404 Not Found?
    你最不希望看到的,即找不到頁(yè)面。如你在google上找到一個(gè)頁(yè)面,點(diǎn)擊這個(gè)鏈接返回404,表示這個(gè)頁(yè)面已經(jīng)被網(wǎng)站刪除了,google那邊的記錄只是美好的回憶。
    500 Internal Server Error
    看到這個(gè)錯(cuò)誤,你就應(yīng)該查查服務(wù)端的日志了,肯定拋出了一堆異常,別睡了,起來(lái)改BUG去吧!

    ◆200 (OK): 找到了該資源,并且一切正常。

    ◆302/307:臨時(shí)重定向,指出請(qǐng)求的文檔已被臨時(shí)移動(dòng)到別處, 此文檔的新的url在location響應(yīng)頭中給出

    ◆304 (NOT MODIFIED): 該資源在上次請(qǐng)求之后沒(méi)有任何修改。這通常用于瀏覽器的緩存機(jī)制

    ◆401 (UNAUTHORIZED): 客戶端無(wú)權(quán)訪問(wèn)該資源。這通常會(huì)使得瀏覽器要求用戶輸入用戶名和密碼,以登錄到服務(wù)器。

    ◆403 (FORBIDDEN): 客戶端未能獲得授權(quán)。這通常是在401之后輸入了不正確的用戶名或密碼。

    ◆404 (NOT FOUND): 在指定的位置不存在所申請(qǐng)的資源。

    ?

    常見的HTTP響應(yīng)報(bào)文頭屬性

    Cache-Control?
    響應(yīng)輸出到客戶端后,服務(wù)端通過(guò)該報(bào)文頭屬告訴客戶端如何控制響應(yīng)內(nèi)容的緩存。

    常見的取值有private、public、no-cache、max-age,no-store,默認(rèn)為private。
    private:? ?? ?? ?? ??客戶端可以緩存
    public:? ?? ?? ?? ???客戶端和代理服務(wù)器都可緩存(前端的同學(xué),可以認(rèn)為public和private是一樣的)
    max-age=xxx:???緩存的內(nèi)容將在 xxx 秒后失效
    no-cache: ? ?? ????需要使用對(duì)比緩存來(lái)驗(yàn)證緩存數(shù)據(jù)
    no-store: ? ?? ?? ??所有內(nèi)容都不會(huì)緩存

    默認(rèn)為private,緩存時(shí)間為31536000秒(365天)也就是說(shuō),在365天內(nèi)再次請(qǐng)求這條數(shù)據(jù),都會(huì)直接獲取緩存數(shù)據(jù)庫(kù)中的數(shù)據(jù),直接使用。

    ETag?
    一個(gè)代表響應(yīng)服務(wù)端資源(如頁(yè)面)版本的報(bào)文頭屬性,如果某個(gè)服務(wù)端資源發(fā)生變化了,這個(gè)ETag就會(huì)相應(yīng)發(fā)生變化。它是Cache-Control的有益補(bǔ)充,可以讓客戶端“更智能”地處理什么時(shí)候要從服務(wù)端取資源,什么時(shí)候可以直接從緩存中返回響應(yīng)。

    Location?
    我們?cè)贘SP中讓頁(yè)面Redirect到一個(gè)某個(gè)A頁(yè)面中,其實(shí)是讓客戶端再發(fā)一個(gè)請(qǐng)求到A頁(yè)面,這個(gè)需要Redirect到的A頁(yè)面的URL,其實(shí)就是通過(guò)響應(yīng)報(bào)文頭的Location屬性告知客戶端的,如下的報(bào)文頭屬性,將使客戶端redirect到iteye的首頁(yè)中:

    [javascript]?view plain?copy

  • Location:?http://www.iteye.com????
  • Set-Cookie?
    服務(wù)端可以設(shè)置客戶端的Cookie,其原理就是通過(guò)這個(gè)響應(yīng)報(bào)文頭屬性實(shí)現(xiàn)的:

    [javascript]?view plain?copy

  • Set-Cookie:?UserID=JohnDoe;?Max-Age=3600;?Version=1????
  • ?

    cookie機(jī)制:

    客戶端請(qǐng)求服務(wù)器,如果服務(wù)器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個(gè)Cookie。客戶端瀏覽器會(huì)把Cookie保存起來(lái)。當(dāng)瀏覽器再請(qǐng)求該網(wǎng)站時(shí),瀏覽器把請(qǐng)求的網(wǎng)址連同該Cookie一同提交給服務(wù)器。服務(wù)器檢查該Cookie,以此來(lái)辨認(rèn)用戶狀態(tài)。服務(wù)器還可以根據(jù)需要修改Cookie的內(nèi)容。

    Cookie的maxAge決定著Cookie的有效期,單位為秒(Second)。Cookie中通過(guò)getMaxAge()方法與setMaxAge(int maxAge)方法來(lái)讀寫maxAge屬性。

    如果maxAge屬性為正數(shù),則表示該Cookie會(huì)在maxAge秒之后自動(dòng)失效。

    如果maxAge為負(fù)數(shù),則表示該Cookie僅在本瀏覽器窗口以及本窗口打開的子窗口內(nèi)有效,關(guān)閉窗口后該Cookie即失效。

    如果maxAge為0,則表示刪除該Cookie。

    ?

    Cookie并不提供修改、刪除操作。如果要修改某個(gè)Cookie,只需要新建一個(gè)同名的Cookie,添加到response中覆蓋原來(lái)的Cookie。

    如果要?jiǎng)h除某個(gè)Cookie,只需要新建一個(gè)同名的Cookie,并將maxAge設(shè)置為0,并添加到response中覆蓋原來(lái)的Cookie。

    Cookie cookie = new Cookie("username","helloweenvsfei");?? // 新建Cookie

    cookie.setMaxAge(0);??? ?????? ??? ??? ?????? // 設(shè)置生命周期為0,不能為負(fù)數(shù)

    response.addCookie(cookie); ?????? ??? ??? ??? // 必須執(zhí)行這一句?輸出到客戶端

    ?

    狀態(tài)消息

    編輯

    1xx:信息

    消息

    描述

    100 Continue

    服務(wù)器僅接收到部分請(qǐng)求,但是一旦服務(wù)器并沒(méi)有拒絕該請(qǐng)求,客戶端應(yīng)該繼續(xù)發(fā)送其余的請(qǐng)求。

    101 Switching Protocols

    服務(wù)器轉(zhuǎn)換協(xié)議:服務(wù)器將遵從客戶的請(qǐng)求轉(zhuǎn)換到另外一種協(xié)議。

    ?

    2xx:成功

    消息

    描述

    200 OK

    請(qǐng)求成功(其后是對(duì)GET和POST請(qǐng)求的應(yīng)答文檔。)

    201 Created

    請(qǐng)求被創(chuàng)建完成,同時(shí)新的資源被創(chuàng)建。

    202 Accepted

    供處理的請(qǐng)求已被接受,但是處理未完成。

    203 Non-authoritative Information

    文檔已經(jīng)正常地返回,但一些應(yīng)答頭可能不正確,因?yàn)槭褂玫氖俏臋n的拷貝。

    204 No Content

    沒(méi)有新文檔。瀏覽器應(yīng)該繼續(xù)顯示原來(lái)的文檔。如果用戶定期地刷新頁(yè)面,而Servlet可以確定用戶文檔足夠新,這個(gè)狀態(tài)代碼是很有用的。

    205 Reset Content

    沒(méi)有新文檔。但瀏覽器應(yīng)該重置它所顯示的內(nèi)容。用來(lái)強(qiáng)制瀏覽器清除表單輸入內(nèi)容。

    206 Partial Content

    客戶發(fā)送了一個(gè)帶有Range頭的GET請(qǐng)求,服務(wù)器完成了它。

    ?

    3xx:重定向

    消息

    描述

    300 Multiple Choices

    多重選擇。鏈接列表。用戶可以選擇某鏈接到達(dá)目的地。最多允許五個(gè)地址。

    301 Moved Permanently

    所請(qǐng)求的頁(yè)面已經(jīng)轉(zhuǎn)移至新的url。

    302 Found

    所請(qǐng)求的頁(yè)面已經(jīng)臨時(shí)轉(zhuǎn)移至新的url。

    303 See Other

    所請(qǐng)求的頁(yè)面可在別的url下被找到。

    304 Not Modified

    未按預(yù)期修改文檔。客戶端有緩沖的文檔并發(fā)出了一個(gè)條件性的請(qǐng)求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務(wù)器告訴客戶,原來(lái)緩沖的文檔還可以繼續(xù)使用。

    305 Use Proxy

    客戶請(qǐng)求的文檔應(yīng)該通過(guò)Location頭所指明的代理服務(wù)器提取。

    306?Unused

    此代碼被用于前一版本。目前已不再使用,但是代碼依然被保留。

    307 Temporary Redirect

    被請(qǐng)求的頁(yè)面已經(jīng)臨時(shí)移至新的url。

    ?

    4xx:客戶端錯(cuò)誤

    消息

    描述

    400 Bad Request

    服務(wù)器未能理解請(qǐng)求。

    401 Unauthorized

    被請(qǐng)求的頁(yè)面需要用戶名和密碼。

    401.1

    登錄失敗。

    401.2

    服務(wù)器配置導(dǎo)致登錄失敗。

    401.3

    由于 ACL 對(duì)資源的限制而未獲得授權(quán)。

    401.4

    篩選器授權(quán)失敗。

    401.5

    ISAPI/CGI 應(yīng)用程序授權(quán)失敗。

    401.7

    訪問(wèn)被 Web 服務(wù)器上的 URL 授權(quán)策略拒絕。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。

    402 Payment Required

    此代碼尚無(wú)法使用。

    403 Forbidden

    對(duì)被請(qǐng)求頁(yè)面的訪問(wèn)被禁止。

    403.1

    執(zhí)行訪問(wèn)被禁止。

    403.2

    讀訪問(wèn)被禁止。

    403.3

    寫訪問(wèn)被禁止。

    403.4

    要求 SSL。

    403.5

    要求 SSL 128。

    403.6

    IP 地址被拒絕。

    403.7

    要求客戶端證書。

    403.8

    站點(diǎn)訪問(wèn)被拒絕。

    403.9

    用戶數(shù)過(guò)多。

    403.10

    配置無(wú)效。

    403.11

    密碼更改。

    403.12

    拒絕訪問(wèn)映射表。

    403.13

    客戶端證書被吊銷。

    403.14

    拒絕目錄列表。

    403.15

    超出客戶端訪問(wèn)許可。

    403.16

    客戶端證書不受信任或無(wú)效。

    403.17

    客戶端證書已過(guò)期或尚未生效。

    403.18

    在當(dāng)前的應(yīng)用程序池中不能執(zhí)行所請(qǐng)求的 URL。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。

    403.19

    不能為這個(gè)應(yīng)用程序池中的客戶端執(zhí)行 CGI。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。

    403.20

    Passport 登錄失敗。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。

    404 Not Found

    服務(wù)器無(wú)法找到被請(qǐng)求的頁(yè)面。

    404.0

    (無(wú))–沒(méi)有找到文件或目錄。

    404.1

    無(wú)法在所請(qǐng)求的端口上訪問(wèn) Web 站點(diǎn)。

    404.2

    Web 服務(wù)擴(kuò)展鎖定策略阻止本請(qǐng)求。

    404.3

    MIME 映射策略阻止本請(qǐng)求。

    405 Method Not Allowed

    請(qǐng)求中指定的方法不被允許。

    406 Not Acceptable

    服務(wù)器生成的響應(yīng)無(wú)法被客戶端所接受。

    407 Proxy Authentication Required

    用戶必須首先使用代理服務(wù)器進(jìn)行驗(yàn)證,這樣請(qǐng)求才會(huì)被處理。

    408 Request Timeout

    請(qǐng)求超出了服務(wù)器的等待時(shí)間。

    409 Conflict

    由于沖突,請(qǐng)求無(wú)法被完成。

    410 Gone

    被請(qǐng)求的頁(yè)面不可用。

    411 Length Required

    "Content-Length" 未被定義。如果無(wú)此內(nèi)容,服務(wù)器不會(huì)接受請(qǐng)求。

    412 Precondition Failed

    請(qǐng)求中的前提條件被服務(wù)器評(píng)估為失敗。

    413 Request Entity Too Large

    由于所請(qǐng)求的實(shí)體的太大,服務(wù)器不會(huì)接受請(qǐng)求。

    414 Request-url Too Long

    由于url太長(zhǎng),服務(wù)器不會(huì)接受請(qǐng)求。當(dāng)post請(qǐng)求被轉(zhuǎn)換為帶有很長(zhǎng)的查詢信息的get請(qǐng)求時(shí),就會(huì)發(fā)生這種情況。

    415 Unsupported Media Type

    由于媒介類型不被支持,服務(wù)器不會(huì)接受請(qǐng)求。

    416 Requested Range Not Satisfiable

    服務(wù)器不能滿足客戶在請(qǐng)求中指定的Range頭。

    417 Expectation Failed

    執(zhí)行失敗。

    423

    鎖定的錯(cuò)誤。

    ?

    5xx:服務(wù)器錯(cuò)誤

    消息

    描述

    500 Internal Server Error

    請(qǐng)求未完成。服務(wù)器遇到不可預(yù)知的情況。

    500.12

    應(yīng)用程序正忙于在 Web 服務(wù)器上重新啟動(dòng)。

    500.13

    Web 服務(wù)器太忙。

    500.15

    不允許直接請(qǐng)求 Global.asa。

    500.16

    UNC 授權(quán)憑據(jù)不正確。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。

    500.18

    URL 授權(quán)存儲(chǔ)不能打開。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。

    500.100

    內(nèi)部 ASP 錯(cuò)誤。

    501 Not Implemented

    請(qǐng)求未完成。服務(wù)器不支持所請(qǐng)求的功能。

    502 Bad Gateway

    請(qǐng)求未完成。服務(wù)器從上游服務(wù)器收到一個(gè)無(wú)效的響應(yīng)。

    502.1

    CGI 應(yīng)用程序超時(shí)。 ·

    502.2

    CGI 應(yīng)用程序出錯(cuò)。

    503 Service Unavailable

    請(qǐng)求未完成。服務(wù)器臨時(shí)過(guò)載或當(dāng)機(jī)。

    504 Gateway Timeout

    網(wǎng)關(guān)超時(shí)。

    505 HTTP Version Not Supported

    服務(wù)器不支持請(qǐng)求中指明的HTTP協(xié)議版本。

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的爬虫 spider02——详析http的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。