4

REST APi 魔女を介して認証する webapp が、ユーザー ID とセッション トークンで応答します。これは、API のセキュリティで保護されたエンド ポイントの承認基本ヘッダーとして将来の ajax 要求と共に送信されます。これは、iOS Safari を含むすべてのブラウザーで正常に機能します。iOS (iPad) では、apple-mobile-web-app-capable メタ タグを使用してそのアプリケーションをホーム画面に追加すると、問題が発生します。 Mac のネットワーク要求タブ) 最初のセキュリティで保護された呼び出しが送信されると、パスワードの入力を求める safari Authenticaion Required ポップアップが表示されます。

ヘッダーは、ajaxSetupbeforeSendプロパティを介して設定されます。

xhr.setRequestHeader("Authorization", "Basic " + base64Value)

繰り返しますが、すべてのブラウザーですべて問題なく、IOS Safari アプリとホーム ボタン モードは問題ありませんが、meta: apple-mobile-web-app-capable を使用すると、認証メカニズムが壊れます。

私はたくさん検索しましたが、まだ解決策が見つかりませんでした。

4

2 に答える 2

0

私の問題は解決しました。Ajax POST リクエストは Safari IOS 6 でキャッシュされます。キャッシュと Cookie を消去しても、以前にキャッシュされたリクエストがどこかにスタックします。別の ajax 呼び出しで関連する問題が発生しましたが、REST インターセプターに no cache ヘッダーを追加することで回避しましたが、何らかの理由で API へのログイン呼び出しはキャッシュされた応答 (古いセッション トークン) を使用していましたが、WEB でのみ使用されていました。 CAPABLE モード。LOGIN URL の末尾にタイムスタンプを追加すると、その問題が修正されました。

WEB CAPABLE MODE のみで特定のリクエストが履歴/Cookie から消去されない理由はまだわかりません.....

于 2012-10-24T11:24:58.283 に答える
0

GET リクエストでこの問題が発生しました。私の解決策は、cache: falseフラグをに追加することでしたjQuery.ajax()。これにより、キャッシングを防ぐためにタイムスタンプ付きの追加の GET パラメータが追加されます。jQuery を使用しない場合は、独自のコードで同様のトリックを使用できます。

POST リクエストは決してキャッシュされるべきではありません。それは本当にiOSのバグです。

jQuery.ajax ドキュメント: http://api.jquery.com/jquery.ajax/

于 2014-06-27T19:09:32.267 に答える