給網站管理者:SaveHere 的請求

SaveHere 是存連結的 iPhone app。有人分享連結時,他 iPhone 上的 app 會讀取那一頁。SaveHere 不是爬蟲;請求都從使用者的 iPhone 發出,不是從 SaveHere 的伺服器。

怎麼認出 SaveHere

User-Agent

SaveHere/<版本>

例如 SaveHere/0.1.0。不含裝置或瀏覽器名稱。

從哪裡發出
使用者的 iPhone。IP 位址是使用者的,不是我們的。
Accept
頁面請求:text/html,application/xhtml+xml,*/*;q=0.8
Accept-Language
頁面請求:跟著使用者的語言設定。
robots.txt 與圖片
只帶上面的 User-Agent。robots.txt 請求另外帶 Accept: text/plain,*/*;q=0.8。其他標頭是 iOS 自己加的。
Cookie 與登入
都沒有。SaveHere 不送 cookie,也不登入。

SaveHere 什麼時候發出請求

  • 分享:使用者分享連結的當下,讀取頁面一次。
  • 重新讀取:使用者在那筆收藏按「重新讀取」時,讀取頁面一次。
  • 確認原貼文:使用者打開有內容的收藏時,送一次 GET 確認頁面還在不在。同一筆收藏 24 小時內最多一次。
  • robots.txt:每次讀取頁面(包括確認原貼文)之前,先讀 /robots.txt。每支 iPhone 保留最多 24 小時。
  • 圖片:頁面上的圖片和網站圖示,各下載一次。分享時讀到的頁面,app 會在使用者下次打開時下載。

SaveHere 不會定期或批次請求頁面。每個頁面請求都來自使用者的動作:分享、按「重新讀取」或打開收藏。

每個請求逾時 15 秒。每頁最多讀 2 MB 的 HTML(YouTube 是 6 MB),每張圖片最多 20 MB。

SaveHere 不做的事

  • 不爬整站、不跟著連結走、不批次請求頁面。
  • 不登入,不送 cookie。
  • 不偽裝成瀏覽器或其他機器人。
  • 不破解 CAPTCHA 或驗證頁,不用非官方 API。
  • 不下載影片或音訊檔。

怎麼讓 SaveHere 停止讀取

方法一:robots.txt

在 robots.txt 點名 SaveHere:

robots.txt
User-agent: SaveHere
Disallow: /

也可以只擋一部分:

robots.txt
User-agent: SaveHere
Disallow: /members/
Allow: /members/public/
  • SaveHere 只看點名它的群組,不分大小寫;寫 SaveHere/1.0 也算。
  • SaveHere 不套用 User-agent: * 的群組。它是因為有人要求才讀一頁,不把自己當成爬蟲。
  • 符合的規則中,路徑最長的優先;Allow 和 Disallow 一樣長時,Allow 優先。* 和 $ 的用法照 RFC 9309。
  • 路徑被禁止時,SaveHere 不送出頁面請求,只存網址。
  • 修改後 24 小時內,每支 iPhone 都會套用。讀不到 robots.txt(網路錯誤、5xx、超過 2 秒)時,SaveHere 照常讀取頁面;回應 4xx 視為沒有規則。

方法二:請我們把你的網域加進名單

寄信到 aaron@savehere.app,附上網域,以及讓我們確認網域屬於你的方式。我們會把它加進 app 內建的名單。名單裡的網域(含子網域),SaveHere 完全不發請求、不用 Safari 的頁面內容、不用 LinkPresentation,只存網址。

名單內建在 app 裡,所以要等使用者更新到包含你網域的版本才生效。

robots.txt 不適用的情況

  • 從 Safari 分享的頁面:使用者從 Safari 分享時,SaveHere 可以直接用 Safari 已經顯示的頁面,不另外發請求。這種情況 robots.txt 不適用,因為使用者已經拿到頁面了;網域名單則適用。
  • 圖片與網站圖示:讀到頁面之後,頁面上的圖片和網站圖示同樣用 SaveHere 的 User-Agent 下載,不會再檢查一次 robots.txt。
  • 轉址:SaveHere 檢查的是分享連結所在網站的 robots.txt。連結轉址到其他網站時,不會再檢查那個網站的 robots.txt。

聯絡我們

問題、回報或停止讀取的要求:aaron@savehere.app