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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫 spider02——详析http

發布時間:2024/2/28 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫 spider02——详析http 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HTTP協議

1.簡介

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

HTTP基于TCP/IP通信協議來傳遞數據。

HTTP基于客戶端/服務端(C/S)架構模型,通過一個可靠的鏈接來交換信息,是一個無狀態的請求/響應協議。

2.特點

(1)HTTP是無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。

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

(3)HTTP是無狀態:無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

?

HTTP請求報文

HTTP請求報文由3部分組成(請求行+請求頭+請求體):

請求行

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

②為請求對應的URL地址,它和報文頭的Host屬性組成完整的請求URL。

③是協議名稱及版本號。

請求頭:

④是HTTP的報文頭,報文頭包含若干個屬性,格式為“屬性名:屬性值”,服務端據此獲取客戶端的信息。

與緩存相關的規則信息,均包含在header中

請求體:

⑤是報文體,它將一個頁面表單中的組件值通過param1=value1?m2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求參數的數據。不但報文體可以傳遞請求參數,請求URL也可以通過類似于“/chapter15/user.html? param1=value1?m2=value2”的方式傳遞請求參數。?

?

HTTP請求報文頭屬性

Accept?
請求報文可通過一個“Accept”報文頭屬性告訴服務端 客戶端接受什么類型的響應。?
如下報文頭相當于告訴服務端,俺客戶端能夠接受的響應類型僅為純文本數據啊,你丫別發其它什么圖片啊,視頻啊過來,那樣我會歇菜的~~~

[javascript]?view plain?copy

  • Accept:text/plain???
  • Accept屬性的值可以為一個或多個MIME類型的值(描述消息內容類型的因特網標準, 消息能包含文本、圖像、音頻、視頻以及其他應用程序專用的數據)

    cookie

    客戶端的Cookie就是通過這個報文頭屬性傳給服務端的哦!如下所示:

    [javascript]?view plain?copy

  • Cookie:?$Version=1;?Skin=new;jsessionid=5F4771183629C9834F8382E23???
  • 服務端是怎么知道客戶端的多個請求是隸屬于一個Session呢?注意到后臺的那個jsessionid = 5F4771183629C9834F8382E23木有?原來就是通過HTTP請求報文頭的Cookie屬性的jsessionid的值關聯起來的!(當然也可以通過重寫URL的方式將會話ID附帶在每個URL的后面哦)。

    Referer
    表示這個請求是從哪個URL過來的,假如你通過google搜索出一個商家的廣告頁面,你對這個廣告頁面感興趣,鼠標一點發送一個請求報文到商家的網站,這個請求報文的Referer報文頭屬性值就是http://www.google.com。

    Cache-Control

    對緩存進行控制,如一個請求希望響應返回的內容在客戶端要被緩存一年,或不希望被緩存就可以通過這個報文頭達到目的。

    ?

    HTTP響應報文

    HTTP的響應報文也由三部分組成(響應行+響應頭+響應體

    ?

    響應行:

    ①報文協議及版本;?
    ②狀態碼及狀態描述;

    響應頭:

    ③響應報文頭,也是由多個屬性組成;

    響應體:

    ④響應報文體,即我們真正要的“干貨”

    響應狀態碼?

    和請求報文相比,響應報文多了一個“響應狀態碼”,它以“清晰明確”的語言告訴客戶端本次請求的處理結果。?
    HTTP的響應狀態碼由5段組成:

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

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

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

    ◆302/307:臨時重定向,指出請求的文檔已被臨時移動到別處, 此文檔的新的url在location響應頭中給出

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

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

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

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

    ?

    常見的HTTP響應報文頭屬性

    Cache-Control?
    響應輸出到客戶端后,服務端通過該報文頭屬告訴客戶端如何控制響應內容的緩存。

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

    默認為private,緩存時間為31536000秒(365天)也就是說,在365天內再次請求這條數據,都會直接獲取緩存數據庫中的數據,直接使用。

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

    Location?
    我們在JSP中讓頁面Redirect到一個某個A頁面中,其實是讓客戶端再發一個請求到A頁面,這個需要Redirect到的A頁面的URL,其實就是通過響應報文頭的Location屬性告知客戶端的,如下的報文頭屬性,將使客戶端redirect到iteye的首頁中:

    [javascript]?view plain?copy

  • Location:?http://www.iteye.com????
  • Set-Cookie?
    服務端可以設置客戶端的Cookie,其原理就是通過這個響應報文頭屬性實現的:

    [javascript]?view plain?copy

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

    cookie機制:

    客戶端請求服務器,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端瀏覽器會把Cookie保存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務器。服務器檢查該Cookie,以此來辨認用戶狀態。服務器還可以根據需要修改Cookie的內容。

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

    如果maxAge屬性為正數,則表示該Cookie會在maxAge秒之后自動失效。

    如果maxAge為負數,則表示該Cookie僅在本瀏覽器窗口以及本窗口打開的子窗口內有效,關閉窗口后該Cookie即失效。

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

    ?

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

    如果要刪除某個Cookie,只需要新建一個同名的Cookie,并將maxAge設置為0,并添加到response中覆蓋原來的Cookie。

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

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

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

    ?

    狀態消息

    編輯

    1xx:信息

    消息

    描述

    100 Continue

    服務器僅接收到部分請求,但是一旦服務器并沒有拒絕該請求,客戶端應該繼續發送其余的請求。

    101 Switching Protocols

    服務器轉換協議:服務器將遵從客戶的請求轉換到另外一種協議。

    ?

    2xx:成功

    消息

    描述

    200 OK

    請求成功(其后是對GET和POST請求的應答文檔。)

    201 Created

    請求被創建完成,同時新的資源被創建。

    202 Accepted

    供處理的請求已被接受,但是處理未完成。

    203 Non-authoritative Information

    文檔已經正常地返回,但一些應答頭可能不正確,因為使用的是文檔的拷貝。

    204 No Content

    沒有新文檔。瀏覽器應該繼續顯示原來的文檔。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新,這個狀態代碼是很有用的。

    205 Reset Content

    沒有新文檔。但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容。

    206 Partial Content

    客戶發送了一個帶有Range頭的GET請求,服務器完成了它。

    ?

    3xx:重定向

    消息

    描述

    300 Multiple Choices

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

    301 Moved Permanently

    所請求的頁面已經轉移至新的url。

    302 Found

    所請求的頁面已經臨時轉移至新的url。

    303 See Other

    所請求的頁面可在別的url下被找到。

    304 Not Modified

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

    305 Use Proxy

    客戶請求的文檔應該通過Location頭所指明的代理服務器提取。

    306?Unused

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

    307 Temporary Redirect

    被請求的頁面已經臨時移至新的url。

    ?

    4xx:客戶端錯誤

    消息

    描述

    400 Bad Request

    服務器未能理解請求。

    401 Unauthorized

    被請求的頁面需要用戶名和密碼。

    401.1

    登錄失敗。

    401.2

    服務器配置導致登錄失敗。

    401.3

    由于 ACL 對資源的限制而未獲得授權。

    401.4

    篩選器授權失敗。

    401.5

    ISAPI/CGI 應用程序授權失敗。

    401.7

    訪問被 Web 服務器上的 URL 授權策略拒絕。這個錯誤代碼為 IIS 6.0 所專用。

    402 Payment Required

    此代碼尚無法使用。

    403 Forbidden

    對被請求頁面的訪問被禁止。

    403.1

    執行訪問被禁止。

    403.2

    讀訪問被禁止。

    403.3

    寫訪問被禁止。

    403.4

    要求 SSL。

    403.5

    要求 SSL 128。

    403.6

    IP 地址被拒絕。

    403.7

    要求客戶端證書。

    403.8

    站點訪問被拒絕。

    403.9

    用戶數過多。

    403.10

    配置無效。

    403.11

    密碼更改。

    403.12

    拒絕訪問映射表。

    403.13

    客戶端證書被吊銷。

    403.14

    拒絕目錄列表。

    403.15

    超出客戶端訪問許可。

    403.16

    客戶端證書不受信任或無效。

    403.17

    客戶端證書已過期或尚未生效。

    403.18

    在當前的應用程序池中不能執行所請求的 URL。這個錯誤代碼為 IIS 6.0 所專用。

    403.19

    不能為這個應用程序池中的客戶端執行 CGI。這個錯誤代碼為 IIS 6.0 所專用。

    403.20

    Passport 登錄失敗。這個錯誤代碼為 IIS 6.0 所專用。

    404 Not Found

    服務器無法找到被請求的頁面。

    404.0

    (無)–沒有找到文件或目錄。

    404.1

    無法在所請求的端口上訪問 Web 站點。

    404.2

    Web 服務擴展鎖定策略阻止本請求。

    404.3

    MIME 映射策略阻止本請求。

    405 Method Not Allowed

    請求中指定的方法不被允許。

    406 Not Acceptable

    服務器生成的響應無法被客戶端所接受。

    407 Proxy Authentication Required

    用戶必須首先使用代理服務器進行驗證,這樣請求才會被處理。

    408 Request Timeout

    請求超出了服務器的等待時間。

    409 Conflict

    由于沖突,請求無法被完成。

    410 Gone

    被請求的頁面不可用。

    411 Length Required

    "Content-Length" 未被定義。如果無此內容,服務器不會接受請求。

    412 Precondition Failed

    請求中的前提條件被服務器評估為失敗。

    413 Request Entity Too Large

    由于所請求的實體的太大,服務器不會接受請求。

    414 Request-url Too Long

    由于url太長,服務器不會接受請求。當post請求被轉換為帶有很長的查詢信息的get請求時,就會發生這種情況。

    415 Unsupported Media Type

    由于媒介類型不被支持,服務器不會接受請求。

    416 Requested Range Not Satisfiable

    服務器不能滿足客戶在請求中指定的Range頭。

    417 Expectation Failed

    執行失敗。

    423

    鎖定的錯誤。

    ?

    5xx:服務器錯誤

    消息

    描述

    500 Internal Server Error

    請求未完成。服務器遇到不可預知的情況。

    500.12

    應用程序正忙于在 Web 服務器上重新啟動。

    500.13

    Web 服務器太忙。

    500.15

    不允許直接請求 Global.asa。

    500.16

    UNC 授權憑據不正確。這個錯誤代碼為 IIS 6.0 所專用。

    500.18

    URL 授權存儲不能打開。這個錯誤代碼為 IIS 6.0 所專用。

    500.100

    內部 ASP 錯誤。

    501 Not Implemented

    請求未完成。服務器不支持所請求的功能。

    502 Bad Gateway

    請求未完成。服務器從上游服務器收到一個無效的響應。

    502.1

    CGI 應用程序超時。 ·

    502.2

    CGI 應用程序出錯。

    503 Service Unavailable

    請求未完成。服務器臨時過載或當機。

    504 Gateway Timeout

    網關超時。

    505 HTTP Version Not Supported

    服務器不支持請求中指明的HTTP協議版本。

    ?

    ?

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。