http中url的組成和首部字段詳解

2021-07-29 15:12:17 字數 4609 閱讀 2219

#超文字轉移協議,我們瀏覽**都是這個

#安全的http連線,在應用層和傳輸層中間加了ssl層

mailto #通過該鏈結可以在internet中傳送郵件

ftp#檔案傳輸協議,傳輸檔案

許可權訪問的時候使用帳號密碼,譬如你的**沒配置好許可權,有的時候你開啟的時候就需要輸入帳號密碼
簡單的來說就是ip或者主機名domain
埠,我們訪問的埠,譬如80 443 8080等等
訪問資源的路徑,相當於元件路徑
引數,但是這個不常用,指定一些引數,譬如指定傳輸方式
查詢引數,譬如我們get username=widuu&password=11111
html資源片段,譬如html文件過大的時候,frag定位到html的一部分

注意

我盡量簡單的講解一下概念

報文的流動方向,是客戶端在上游,就像小溪的上有源頭,然後服務端在底部,我們訪問主機的時候,報文是向下傳輸的是從客戶端向下流入(inbound),當服務端返回資訊的時候,方向就反了,服務端在上游,客戶端在底部,然後還是向下流出(outbound),這就是報文流。

報文的組成部分

起始行和首部之間有兩個字元分割(crlf)就是回車符和換行符分割

起始行就是 get / http/1.1 然後其實是用\r

\n結尾分割

請求報文格式

method:request-url:version

headers

body

響應報文

version:status:reason-phrase  

headers

body

method #請求方法譬如get

post

head

delete

version #http版本,現在基本都是1.1

status #狀態碼 返回響應狀態碼 200 404 500 503

reason-phrase #狀態短語,譬如響應200的ok

headers         #每個首部都是以:分割的,這部分是可以擴充套件的,你譬如accept-language 允許的語言
body            #實體部分,譬如響應返回資訊,返回乙個
這個需要知道的,這個了解了可以對我們程式和判斷問題上有極大的幫助,舉個例子,在segmentfault上回答七牛的乙個問題,乙個網友說打不開**了,顯示是105 (net::errnamenot_resolved)如果你懂了,瞬間就了解了,是無法解析dns伺服器的位址,網路問題

整體範圍                已定義範圍           分  類

100-199 100 - 101 資訊提示

200-299 200 - 206 成功

300-399 300 - 305 重定向

400-499 400 - 415 客戶端錯誤

500-599 500 - 505 服務端錯誤

100

continue 收到了請求,伺服器在收到請求之後必須進行響應

101 根據客戶端的指定切換首部所列的協議

200 ok 請求沒問題,主題部分包含了所有請求

201 建立伺服器物件的請求(put)

202 請求已經被伺服器接收,但是未對執行動作做出響應

203 資源的副本,無法對資源有關的原資訊首部做驗證

204 響應報分中有若干首部和乙個狀態碼,一般是在重新整理時候出現

205 告訴瀏覽器清楚瀏覽器上所有的html的表單元素

206 範圍請求成功

301 重定向,一般**優化用的最多,說明url已經被移除了

302 與301類似,但是告訴臨時定位資源以後使用老url,一般post資料返回302

303 告訴客戶端用另乙個url獲取資源,新的url響應報文的location

304 這個說明檔案未修改,使用本地的

305 通過**來訪問資源

306 未使用

307 跟301類似,根據客戶端使用的location的url來臨時定位資源

我感覺太多了大家可以檢視一下狀態碼大全

connection

#譬如:connection:keep-alive保持持久連線(以前的連線是先連線-處理事物-斷開-再連線一直迴圈下去,keep-alive就一次連線,然後一直保持活躍狀態)

accept

:*/*

accept-encoding

#告訴服務端傳送編碼方式accept-encoding:gzip,deflate,sdch

accept-language

#accept-language:zh-cn,zh;q=0.8,ja;q=0.6,en;q=0.4告訴服務端支援的語言

accept-charset

#告訴伺服器能夠傳送哪些字符集

cache-control

#cache-control:max-age=0報文傳送快取最大時間

host

#請求伺服器的主機名和埠號

referer

#當前請求uri的url文件

user-agent

#應用程式名稱

access-control-allow-origin # access-control-allow-origin:*是否支援跨域請求

date

#date:wed, 26 mar 2014 12:08:40 gmt 響應時顯示報文建立的時間

content-encoding #響應客戶端gzip content-encoding:gzip

content-type #伺服器返回的主體body型別 content-type:text/html; charset="utf-8"

content-disposition #主題檔案描述content-disposition:inline; filename="shbrushvb.js"

content-length #響應主題的長度content-length:2741,可以判斷資料是否接收完成

transfer-encoding #客戶端可靠傳輸的編碼,類似transfer-encoding:chunked都是動態處理

server #server:nginx/1.4.4伺服器的

etag #主體檔案的識別符號,譬如七牛就用這個判斷檔案的唯一性,而且還給了演算法etag:"fqybjmdmt-xbsjnh4uyrq7npb2t3"

via #這個是報分經過的**和閘道器,例如如下我用的七牛雲儲存的 x-via:1.1 lysx179:88 (cdn cache server v2.0), 1.1 czdx85:8104 (cdn cache server v2.0), 1.1 bjja97:10 (cdn cache server v2.0)

if-none-match #如果etag改變了,才執行

location #伺服器告訴瀏覽器,已經轉移的位置

vary #vary:cookie

expires #主體不在有效,從原始端再次獲取主體的日期和時間

last-modified #實體最後一次被修改日期和時間

HTTP中URI和URL的區別

統一資源標誌符uri就是在某一規則下能把乙個資源獨一無二地標識出來。拿人做例子,假設這個世界上所有人的名字都不能重複,那麼名字就是uri的乙個例項,通過名字這個字串就可以標識出唯一的乙個人。現實當中名字當然是會重複的,所以身份證號才是uri,通過身份證號能讓我們能且僅能確定乙個人。那統一資源定位符u...

HTTP 協議中 URI 和 URL 區別

統一資源標誌符uri就是在某一規則下能把乙個資源獨一無二地標識出來。拿人做例子,假設這個世界上所有人的名字都不能重複,那麼名字就是uri的乙個例項,通過名字這個字串就可以標識出唯一的乙個人。現實當中名字當然是會重複的,所以身份證號才是uri,通過身份證號能讓我們能且僅能確定乙個人。那統一資源定位符u...

爬蟲時url中http和https的區別

今天在爬取乙個網頁時發現總是爬取不成功,資訊量很少,只有幾行 而原網頁 量是很多的,後來我把url中的https換成了http後就把網頁原始碼全部爬取了,查了資料後發現url中使用http和https是有很大區別的 http獲取資料時資訊齊全,https獲取資料的資訊有缺失,在確定網路位址後,一般採...