簡體   English   中英

使用/ update-cache請求更新AMP頁面

[英]Using /update-cache requests to update AMP pages

嘗試使用/ update-cache / requests來更新一些AMP頁面,但是我收到403錯誤。

從網址中刪除了開放部分/協議,因為我沒有發布這么多鏈接的聲譽,但一切都是https。

我的頁面是:www.qponverzum.hu/ajanlat/budapest-elozd-meg-a-hajhullast-mikrokameras-hajdiagnosztika-hajhagyma-es-fejborvizsgalattal-tanacsadas-5000-ft-helyett-2500-ft-ert-biohajklinika- szepsegapolas-egeszseg / AMP

來自AMP緩存:www-qponverzum-hu.cdn.ampproject.org/c/s/www.qponverzum.hu/ajanlat/budapest-elozd-meg-a-hajhullast-mikrokameras-hajdiagnosztika-hajhagyma-es-fejborvizsgalattal-tanacsadas -5000-FT-helyett-2500-FT-ERT-biohajklinika-szepsegapolas-egeszseg /安培

我一直在關注developers.google.com/amp/cache/update-ping的文檔

如果我發出/ update-ping請求,它似乎工作正常,返回200無內容響應,但由於我們想要使用/更新緩存的大量網址/頁面,因為它允許更高的請求率。

我創建了一個私有和公共RSA密鑰,並在www.qponverzum.hu/.well-known/amphtml/apikey.pub上提供了公鑰。

我一直在嘗試使用以下php代碼來生成update-cache url

$ampBaseUrl = "https://www-qponverzum-hu.cdn.ampproject.org";
$signatureUrl = '/update-cache/c/s/www.qponverzum.hu/ajanlat/budapest-elozd-meg-a-hajhullast-mikrokameras-hajdiagnosztika-hajhagyma-es-fejborvizsgalattal-tanacsadas-5000-ft-helyett-2500-ft-ert-biohajklinika-szepsegapolas-egeszseg/amp?amp_action=flush&_ts='.time();

// opening the private key
$pkeyid = openssl_pkey_get_private("file://private-key.pem");

// generating the signature
openssl_sign($signatureUrl, $signature, $pkeyid)

// urlsafe base64 encoding
$signature = urlsafe_b64encode($signature);

// final url for updating
$ampUrl = $ampBaseUrl.$signatureUrl."&amp_url_signature=".$signature;

我正在使用的urlsafe_b64encode函數:

function urlsafe_b64encode($string) {
    return str_replace(array('+','/','='),array('-','_',''), base64_encode($string));
}

$ ampUrl最終看起來像這樣: https ://www-qponverzum-hu.cdn.ampproject.org/update-cache/c/s/www.qponverzum.hu/ajanlat/budapest-elozd-meg-a-hajhullast- mikrokameras-hajdiagnosztika-hajhagyma-ES-fejborvizsgalattal-tanacsadas-5000-FT-helyett-2500-FT-ERT-biohajklinika-szepsegapolas-egeszseg /安培?amp_action =平齊&amp_ts = 1500362660&amp_url_signature = NjTCnmqUGpMY_CokGxchoczSOxnTLQvcQsX4fv2gIhW3H8hVw24mKCpmNoyV-9LND3OAR9ld80KeMH3lip863p_wBorIy1BAag7bRfvWcxsPrbqbox87VMrUWCEsry5epWxKYl2qNCT1GMv8SYAJ5WR0QZR0Qjvw5MXfZjohmbvrxJ7mWlc7fcvWoIXuO_q_yFkhi7A-fOZWm9sy8UDIlq-zNEPkVUwfqfWc_HbNHgvrk9Z6zZSNzB-dWAOT6QYAc1KeEVOIbvQxKkLkGMArTpydj5iLxz0aERvglKRl215Bqh6_jZu95T5yKv7X4R127ylpWYW2YDlTR9bgRE7Faw

如果我對此網址(使用瀏覽器或curl)發出簡單的GET請求,則會收到403錯誤(“您的客戶端無權獲取網址”)。

我已經檢查了網絡服務器日志,但似乎沒有對公鑰網址發出任何請求。

我想我錯過了很明顯的東西,所以任何反饋都會非常感激。

$signatureUrl有一個錯誤 - 在查詢參數中應該是amp_ts而不是_ts ,在openssl_sign添加第四個參數openssl_sign($signatureUrl, $signature, $pkeyid, OPENSSL_ALGO_SHA256);

簽名需要使用SHA256簽名,如果省略它使用SHA1的最后一個參數

我已經使用你的腳本將這2個更改用於我的工作項目,並且它工作正常。

如果沒問題,它應該在響應正文中返回“OK”。

檢查這個https://gist.github.com/krzysztofbukowski/739ccf4061d69360b5b2c8306f5878bd

為“text / plain的”為嘗試設置響應內容類型https://www.qponverzum.hu/.well-known/amphtml/apikey.pub建議在這里

=========

我使用腳本進行更新緩存,但是我收到403禁止錯誤。 很難調試並找出根本原因。 有人成功了嗎?

所有其他答案都真的有幫助 - 謝謝。 我在這里補充一點,希望也有所幫助。

正如@ kul3r4指出的那樣(我第一次錯過了它),apikey.pub文件需要作為純文本提供。 這是Nginx配置規則;

    location /.well-known/amphtml/apikey.pub { ## serve amp public key as plain/text
         default_type text/plain;
    }

如果你正在回應@Krzysztof Bukowski對屏幕的回答,那么&amp在url參數中的事實意味着我的瀏覽器正在剝離amp_tsamp_url_signatureamp部分,所以要注意這一點。

如果你正在努力解決這個問題的文件路徑和語法;

    $pkeyid = openssl_pkey_get_private("file://amp-private-key.pem");

然后在這里按照這個答案,將私鑰的內容放在一個變量 - > Openssl和PHP中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM