Шаблон Post / Redirect / Get для HTTP-ответов с приложением / Excel MIME-тип - PullRequest
0 голосов
/ 16 ноября 2011

Я хочу опубликовать некоторые данные на сервере, и в ответ я хочу создать файл CSV с application/excel в качестве MIME-типа (недавно распознанный как Internet Media Type), чтобы заставить браузер открывать сгенерированныйCSV-файл в Microsoft Excel.Тем не менее, я также хочу предотвратить случайное повторное предоставление пользователем той же информации (повторную публикацию формы) в результате обновления страницы.

При простых операциях CRUD я использую Post/ Redirect / Get шаблон, так что любое дальнейшее обновление будет только отправлять HTTP-запрос Get на сервер, без каких-либо параметров, таким образом не изменяя состояние сервера ( Idempotence ).

Чтоявляется распознанным шаблоном для запрета повторной отправки (повторной публикации) той же информации на сервер, когда ответом является не страница, а файл?

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Шаблон Post / Redirect / Get является ответом на событие просмотра.Здесь нет действия по просмотру (отправка формы открывает только стороннее приложение, то есть Excel), и поэтому любой вид шаблона, связанного с просмотром, будет бесполезен.первоначальная отправка (возможно, с уникальным токеном), чтобы вы могли предотвратить генерацию файлов, и простой в написании сценарий на стороне клиента, например <form onsubmit="this.onsubmit = function(){ return false ; }">

1 голос
/ 24 ноября 2011

Я могу предложить вам еще одно решение.

  • Возьмите хеш (MD5 / SHA256 ..) из представленных вами данных. Хэш 1005 * будет [довольно] уникальным.
  • Поместите его в список в сеансе с ограничением по времени, скажем, 5 минут.
  • Даже ваш пользователь отправляет те же данные. Хеш будет таким же, и вы можете дать сообщение об ошибке своему пользователю.

Если разные пользователи могут публиковать одни и те же данные, вы также можете хранить информацию о пользователях в списке. И дать сообщение об ошибке в соответствии с пользователем.

...