整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          python-滲透測試之自定義請求頭

          python-滲透測試之自定義請求頭

          自定義請求頭

          url='https://www.baidu.com'

          user_agent={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0'}

          r=requests.get(url,headers=user_agent)

          print(r)

          print(r.request.headers)

          控制臺顯示信息

          <Response [200]>

          {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}<Response [200]>

          {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

          找到網站的請求頭的方法
          https://jingyan.baidu.com/article/19192ad852a74da43e570784.html

          漏洞探測工具


          #漏洞探測工具

          url='http://192.168.1.5:80'

          r=requests.options(url)

          result=r.headers['Public']

          print(type(result))

          if result.find('HEAD')and result.find('POST'):

          print(result)

          print('exits iis put val')

          else:

          print("not exits")

          print(r.headers)

          print(r.headers['Allow'])

          控制臺輸出顯示

          <class 'str'>

          OPTIONS, TRACE, GET, HEAD, POST

          exits iis put val

          {'Allow': 'OPTIONS, TRACE, GET, HEAD, POST', 'Server': 'Microsoft-IIS/10.0', 'Public': 'OPTIONS, TRACE, GET, HEAD, POST', 'Date': 'Mon, 14 Sep 2020 13:40:58 GMT', 'Content-Length': '0'}

          OPTIONS, TRACE, GET, HEAD, POST

          服務器的中間件和日期時間

          url='http://192.168.1.5:80'

          r=requests.options(url)

          result=r.headers['Public']

          print(type(result))

          r1=requests.get(url)

          print(r.headers)

          print("服務器的中間件為*"+r.headers['Server'])

          print('服務器的日期為*'+r.headers['Date'])

          控制臺信息

          <class 'str'>

          {'Allow': 'OPTIONS, TRACE, GET, HEAD, POST', 'Server': 'Microsoft-IIS/10.0', 'Public': 'OPTIONS, TRACE, GET, HEAD, POST', 'Date': 'Mon, 14 Sep 2020 13:49:08 GMT', 'Content-Length': '0'}

          服務器的中間件為*Microsoft-IIS/10.0

          服務器的日期為*Mon, 14 Sep 2020 13:49:08 GMT

          家好,我是前端西瓜哥。

          今天帶大家學習一些 HTTP 常見的頭字段,談談它們的作用,并附帶一些實際使用場景。

          常見的請求頭字段

          客戶端發送到服務端的 HTTP 請求,這個數據包稱為請求報文。其中的頭字段,就是請求頭字段。

          Accept

          客戶端希望獲得資源的類型。

          下面是我們打開一個鏈接時,瀏覽器默認帶上的 Accept:

          Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

          類似 text/html 則是 MIME 類型,接在后面的 q 代表的是優先級,q 的范圍通常在 0 到 1,越大優先級越高。

          如果是通過 img 標簽發起的請求,Accept 為:

          Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8

          服務端可以從中得知瀏覽器支持高壓縮比的 webp 圖片格式,可以考慮返回 webp 格式資源,來提高用戶加載資源速度。

          Accept-Encoding

          客戶端支持的壓縮算法。

          Accept-Encoding: gzip, deflate, br

          服務端可以根據它來使用壓縮算法來壓縮資源,降低帶寬,讓用戶能更快加載資源。

          使用廣泛的老牌壓縮算法是 gzip,壓縮效率最好的是 br。

          Accept-Language

          客戶端支持的語言。

          我在瀏覽器語言設置中做了以下設置:

          瀏覽器發起的請求就會帶上這 3 種語言,并根據順序設置優先級:

          Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7

          服務端可以通過這個字段來做 國際化,根據用戶設置的語言來返回不同國家文案內容。

          Host

          當前請求的域名。

          Host: nginx.org

          服務端可以根據這個字段來做 反向代理。

          假設 blog.fstars.com 和 static.fstars.com 都指向一個 IP 下的服務器,服務端就可以通過這個字段來識別返回對應的服務:blog.fstars.com 拿到的是博客網站,而static.fstars.com 則是拿到靜態圖片資源。

          比如 Nginx 的反向代理可以這樣寫:

          server {
              # 博客頁面
              server_name  blog.fstars.wang;
              location / {
                  proxy_pass   http://localhost:3000;
              }
          }
          server {
              # 圖片等資源
              server_name  static.fstars.wang;
              location / {
                  root   /www/static/;
              }
          }

          Connection

          客戶端是否希望使用 TCP 長連接。

          Connection: keep-alive

          TCP 的連接要三次握手,斷開要四次揮手。如果我們的請求很頻繁,TCP 連接后發完一個請求就斷開,實在有點浪費資源。所以 HTTP 加入了 Connection 頭字段,來指定 TCP 的長時間連接。

          keep-alive 表示長連接;close 表示短連接。

          User-Agent

          用戶代理。該字段標注了發送方的一些信息,你可以通過它來知道請求方是瀏覽器、爬蟲、postman 還是 cURL。

          我使用蘋果筆記本打開 Chrome 瀏覽器,它的 User-Agent 是這樣的。

          User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

          再比如使用 cURL 命令行工具發出的請求:

          User-Agent: curl/7.77.0

          User-Agent 可以輕易偽造,并不完全可信,只是作為參考。

          一種使用方式是通過 User-Agent 中是否帶有 Mobile 之類的信息,來判斷客戶端是否為移動設備,做一個 302 重定向到另一個移動端適配域名下,比如從 xxx.com 跳轉到 m.xxx.com?;蛘叻催^來,從移動端頁面跳轉到普通頁面布局。

          如果你用電腦瀏覽器打開 m.bilibili.com,那 bilibili 就會給你來個 302 重定向到 www.bilibili.com。

          常見的響應頭字段

          服務端響應客戶端的請求報文,會返回響應報文,響應報文的頭字段,就是所謂的響應頭字段。

          Content-Type

          服務端返回的資源類型,可以帶上使用的編碼格式。

          訪問普通的 HTML 網頁:

          Content-Type: text/html; charset=utf-8

          text/html 代表資源為 HTML,charset=utf-8 表示使用了 UTF-8 編碼??蛻舳司涂梢愿鶕@些信息進行展示。

          Content-Encoding

          返回資源使用的壓縮格式

          Content-Encoding: gzip

          使用的壓縮算法是從請求頭 Accept-Encoding 中選一個出來的,返回的資源是被對應的資源壓縮過的。

          關于啟用 gzip 壓縮,可以看看我的這篇文章:《前端性能優化:啟用 gzip》

          Content-Length

          HTTP 消息體的長度。

          Content-Length: 2103

          Date

          HTTP 響應報文生成的時間,使用了 GMT 格式。

          Date: Wed, 10 Aug 2022 13:16:58 GMT

          Connection

          服務端決定使用長連接還是短連接。

          Connection: keep-alive

          Server

          使用了哪種服務器

          比如使用了 Nginx:

          Server: nginx/1.21.5

          因為 Server 會暴露服務器使用的技術棧,容易被黑客針對性攻擊??梢钥紤]去掉這個字段,或者給一個沒有帶有技術細節的值。比如 github 的做法:

          Server: GitHub.com

          HTTP 緩存相關

          HTTP 緩存相關的頭字段不適合單獨一個個介紹,所以都放這里吧。

          請求頭:

          • Cache-Control
          • Pragma
          • If-Modified-Since
          • If-None-Match

          響應頭:

          • Last-Modified
          • ETag

          這些字段需要配合 HTTP 的 強緩存協商緩存 進行講解,請移步閱讀我之前的寫的一篇文章:

          《HTTP 緩存策略:強緩存和協商緩存》

          CORS 相關

          因為瀏覽器的同源策略,一般情況下發送 Ajax 請求給另一個域名下的 url 會失敗。

          為了解決這個問題,需要使用瀏覽器特有的 CORS (跨源資源共享)相關頭字段,來實現跨域請求。

          這里涉及的頭字段:

          • Access-Control-Request- 前綴的請求頭
          • Access-Control-Allow-前綴的響應頭

          具體看我這篇文章:《瀏覽器跨域請求的機制:CORS》

          Cookies 相關

          涉及到兩個頭字段:

          • Cookie
          • Set-Cookie

          《面試官:Cookies 的屬性有哪些?》

          結尾

          HTTP 的常見頭字段很多,這里簡單介紹了一些,希望能對你了解 HTTP 規范有所幫助。

          我是前端西瓜哥,歡迎關注我,學習更多前端知識。

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

          HTTP是一個基于TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。

          HTTP 響應頭信息

          HTTP請求頭提供了關于請求,響應或者其他的發送實體的信息。

          在本章節中我們將具體來介紹HTTP響應頭信息。

          Allow	
          服務器支持哪些請求方法(如GET、POST等)。
          Content-Encoding	
          文檔的編碼(Encode)方法。只有在解碼之后才可以得到Content-Type頭指定的內容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時間。Java的GZIPOutputStream可以很方便地進行gzip壓縮,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet應該通過查看Accept-Encoding頭(即request.getHeader("Accept-Encoding"))檢查瀏覽器是否支持gzip,為支持gzip的瀏覽器返回經gzip壓縮的HTML頁面,為其他瀏覽器返回普通頁面。
          Content-Length	
          表示內容長度。只有當瀏覽器使用持久HTTP連接時才需要這個數據。如果你想要利用持久連接的優勢,可以把輸出文檔寫入 ByteArrayOutputStream,完成后查看其大小,然后把該值放入Content-Length頭,最后通過byteArrayStream.writeTo(response.getOutputStream()發送內容。
          Content-Type	
          表示后面的文檔屬于什么MIME類型。Servlet默認為text/plain,但通常需要顯式地指定為text/html。由于經常要設置Content-Type,因此HttpServletResponse提供了一個專用的方法setContentType。
          
          Date	
          當前的GMT時間。你可以用setDateHeader來設置這個頭以避免轉換時間格式的麻煩。
          
          Expires	
          應該在什么時候認為文檔已經過期,從而不再緩存它?
          Last-Modified	
          文檔的最后改動時間??蛻艨梢酝ㄟ^If-Modified-Since請求頭提供一個日期,該請求將被視為一個條件GET,只有改動時間遲于指定時間的文檔才會返回,否則返回一個304(Not Modified)狀態。Last-Modified也可用setDateHeader方法來設置。
          
          Location	
          表示客戶應當到哪里去提取文檔。Location通常不是直接設置的,而是通過HttpServletResponse的sendRedirect方法,該方法同時設置狀態代碼為302。
          
          Refresh	
          表示瀏覽器應該在多少時間之后刷新文檔,以秒計。除了刷新當前文檔之外,你還可以通過setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁面。 
          注意這種功能通常是通過設置HTML頁面HEAD區的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">實現,這是因為,自動刷新或重定向對于那些不能使用CGI或Servlet的HTML編寫者十分重要。但是,對于Servlet來說,直接設置Refresh頭更加方便。 
          
          注意Refresh的意義是"N秒之后刷新本頁面或訪問指定頁面",而不是"每隔N秒刷新本頁面或訪問指定頁面"。因此,連續刷新要求每次都發送一個Refresh頭,而發送204狀態代碼則可以阻止瀏覽器繼續刷新,不管是使用Refresh頭還是<META HTTP-EQUIV="Refresh" ...>。 
          注意Refresh頭不屬于HTTP 1.1正式規范的一部分,而是一個擴展,但Netscape和IE都支持它。
          Server	
          服務器名字。Servlet一般不設置這個值,而是由Web服務器自己設置。
          
          Set-Cookie	
          設置和頁面關聯的Cookie。Servlet不應使用response.setHeader("Set-Cookie", ...),而是應使用HttpServletResponse提供的專用方法addCookie。參見下文有關Cookie設置的討論。
          
          WWW-Authenticate	
          客戶應該在Authorization頭中提供什么類型的授權信息?在包含401(Unauthorized)狀態行的應答中這個頭是必需的。例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。 
          注意Servlet一般不進行這方面的處理,而是讓Web服務器的專門機制來控制受密碼保護頁面的訪問(例如.htaccess)。
          

          本文轉自:https://www.linuxprobe.com/http-response-headers.html


          主站蜘蛛池模板: 国产精品视频分类一区| 日本高清不卡一区| 久久久一区二区三区| 性色AV一区二区三区| 日韩精品区一区二区三VR| 精品视频一区二区三区四区| 国产一区在线视频观看| 国产精品日本一区二区不卡视频 | 亚洲色大成网站www永久一区 | 国产成人av一区二区三区不卡 | 日韩精品无码一区二区中文字幕 | 一区二区不卡在线| 日韩熟女精品一区二区三区| 麻豆精品久久久一区二区| 在线精品视频一区二区| 国产精品第一区第27页| 一区国产传媒国产精品| 国产MD视频一区二区三区| 成人区人妻精品一区二区不卡网站 | 日韩一区二区在线观看| 久久国产免费一区| 亚洲乱码一区二区三区国产精品| 蜜桃无码AV一区二区| 丝袜美腿高跟呻吟高潮一区| 国产伦精品一区二区三区四区 | 在线精品自拍亚洲第一区| 国产午夜精品一区二区三区不卡| 中文字幕一区二区三区5566| 无码人妻一区二区三区精品视频 | 精品欧洲av无码一区二区| 日本韩国黄色一区二区三区| 末成年女AV片一区二区| 日本夜爽爽一区二区三区| 久久久国产精品亚洲一区| 亚洲AV日韩精品一区二区三区| 97精品国产福利一区二区三区| 四虎成人精品一区二区免费网站 | 午夜爽爽性刺激一区二区视频| 中文字幕在线精品视频入口一区| 日本高清天码一区在线播放| 91精品一区二区综合在线|