ホームページ  >  記事  >  WeChat アプレット  >  Refererが見つからない問題の概要(WeChat H5決済)

Refererが見つからない問題の概要(WeChat H5決済)

藏色散人
藏色散人転載
2021-08-16 11:29:524678ブラウズ

最近、同社は WeChat の H5 支払いを申請しました。関連する支払い書類はここで見つけることができます https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4リリース後、支払いが開始されました。エラー 販売者のパラメータ形式が間違っています。解決するには販売者に連絡してください。 WeChat の公式ドキュメントによると、エラー メッセージは referer であるはずです。見つけた後、referer が失われていることがわかりました。問題解決のプロセスを記録します。

リファラーとは

HTTP リファラーは、ブラウザが送信するときの HTTP リクエスト header ヘッダー情報の一部です。 Web サーバー リクエストを行うときは、通常、Referer

を使用してどのページからリンクしているかをサーバーに伝え、サーバーが処理する情報を取得できるようにします。

たとえば、Chrome ブラウザのコンソールの Request Headers

Provisional headers are shown
Accept: 
/
Origin: local.test5.show
Referer: local.test5.show/test/show
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36

where## の下に次のような情報が表示されます。 # Referer はこの属性です。

Referer の正しい英語のスペルは referrer です。初期の HTTP 仕様にはスペルミスがあったため、下位互換性を維持するのは間違いでした

Referer の役割

アンチホットリンク

たとえば、独自のリソースをロードしていて、リファラーが自分のサイトではないことがわかった場合は、それをブロックできます

#悪意のあるリクエストを防止これは上記と同じです

#高度な使用法

##たとえば、WeChat H5 支払いにもこれが必要ですが、何をするのかわかりません (hh##)

#リファラーが見つからない

Referer が失われる問題については、まず、クライアントのブラウザによってリファラーがサーバーに送信され、これは、クライアント上で document.referrer

を通じて取得できますが、これはリファラーが実際に送信されることを意味します これはブラウザーの動作であり、リファラーを送信するかどうかの決定はブラウザーの手に委ねられます。これは、HTTP プロトコルには、ブラウザーがリファラーを送信する必要がある状況と、どのような状況でリファラーを送信してはならないかについての厳格な規制があるためです。

1. Web サイトが更新フィールドを使用してジャンプする場合、ほとんどのブラウザーはリファラーを送信しません2。ユーザーが HTTPS Web サイトから別の HTTP Web サイトへのリンクをクリックすると、リファラー

は送信されません。3.html5 では、a タグの rel = "noreferrer" により、ブラウザがリファラーを送信しないようにできます

4。データ URI スキーム リンクを使用する場合、ブラウザはリファラーを送信しません

5。コンテンツ セキュリティ ポリシーを使用すると、ブラウザがリファラーを送信しないようにすることもできます

6。HTML ではヘッダーのメタ タグを使用して、許可しないように制御しますリファラーを送信するブラウザ

URL リンクを自動的に生成します。HTTPS が HTTP に変更されます。

API プロジェクトでいくつかの URL リンクを生成する必要がある場合があります。ただし、サーバーはHTTPS をサポートするように構成されており、HTTPS 経由でアクセスするときに生成される URL は依然として HTTP

この問題に関しては、実際にはサーバー

構成

問題は次のようなものです

私が遭遇した WeChat 支払いの問題に戻ると、一連のブラウザー ジャンプを追跡した結果、プロパティが 2 番目のケース (HTTPS サイトから HTTP サイトにジャンプし、リファラーが失われた) にあることがわかりました。[ps: もう 1 つ] HTTP から HTTPS への迂回は問題ありません。リファラーは失われます] 真ん中の奥に隠されています

もちろん、正面からは問題がなかったので、最初はこの問題に気づきませんでした。 API への終了リクエストをすべてのプロジェクトで全面的に HTTPS を展開し、Referer 情報も引き継がれる その後 WeChat の最後のステップへ 決済 URL をリクエストする際に Referer が失われてしまう

後でわかったことAPI プロジェクトをリクエストすると、API プロジェクトはフロントエンドに URL を返しました この URL はバックエンドコードによって規則に従って生成されました (Laravel 関数のアクション補助) この関数自体には何も問題はありませんが、生成された URL URL リンクが HTTP なので、また問題が発生しています。 ! !

API プロジェクトは HTTPS リクエストで設定されていますが、生成される URL は HTTP です。問題はここです。運用保守のお兄さんに助けを求めたところ、Nginx の逆設定に問題があることが判明しました。

nginx サーバー構成のフラグメントは次のとおりです:

location / {
    proxy_pass http://114.114.114.114:80;
  }
proxy_pass パラメーターが HTTP プロトコルを指していることがわかり、バックグラウンドで取得される URL はすべて HTTP プロトコルです。

#プロキシを

https://114.114. 114.114:443;

に設定すると、問題は解決されます

推奨: 「

WeChat 開発チュートリアル

」 「

以上がRefererが見つからない問題の概要(WeChat H5決済)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。