{"id":81502,"date":"2022-09-03T22:34:27","date_gmt":"2022-09-03T20:34:27","guid":{"rendered":"https:\/\/rmarketingdigital.com\/development\/transmitir-solicitudes-con-la-api-de-recuperacion\/"},"modified":"2020-09-16T15:06:39","modified_gmt":"2020-09-16T18:06:39","slug":"transmitir-solicitudes-con-la-api-de-recuperacion","status":"publish","type":"post","link":"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/","title":{"rendered":"Diffuser les demandes avec l&#039;API Retrieval"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Pruebe-las-secuencias-de-solicitudes\" >Pruebe las secuencias de solicitudes<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Habilitar-el-apoyo-durante-la-fase-de-prueba-de-origen\" >Habilitar el apoyo durante la fase de prueba de origen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Registrese-para-la-prueba-de-origen\" >Reg\u00edstrese para la prueba de origen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Habilitacion-a-traves-de-chrome-flags\" >Habilitaci\u00f3n a trav\u00e9s de chrome: \/\/ flags<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Manifestacion\" >Manifestaci\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Anteriormente-en-las-emocionantes-aventuras-de-fetch-streams\" >Anteriormente en las emocionantes aventuras de fetch streams<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Cuerpos-de-solicitud-de-transmision\" >Cuerpos de solicitud de transmisi\u00f3n<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Flujos-grabables\" >Flujos grabables<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Deteccion-de-caracteristicas\" >Detecci\u00f3n de caracter\u00edsticas<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Restricciones\" >Restricciones<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Redireccionamientos-restringidos\" >Redireccionamientos restringidos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#HTTP-2-solo-por-defecto\" >HTTP \/ 2 solo por defecto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Sin-comunicacion-duplex\" >Sin comunicaci\u00f3n d\u00faplex<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Problemas-potenciales\" >Problemas potenciales<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Incompatibilidad-en-el-lado-del-servidor\" >Incompatibilidad en el lado del servidor<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Incompatibilidad-fuera-de-su-control\" >Incompatibilidad fuera de su control<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#Comentarios-bienvenidos\" >Comentarios bienvenidos<\/a><\/li><\/ul><\/nav><\/div>\n<p><\/p>\n<div>\n<header class=\"w-article-header\">\n<p>\n          <time>22 de julio de 2020<\/time><br \/>\n            Actualizado <time>22 de julio de 2020<\/time>\n        <\/p>\n<\/header>\n<p>Chrome 85 tiene una implementaci\u00f3n experimental de flujos de solicitudes, lo que significa que puede comenzar a realizar una solicitud antes de tener todo el cuerpo disponible.<\/p>\n<p>Podr\u00edas usar esto para:<\/p>\n<ul>\n<li>Calienta el servidor.  En otras palabras, puede iniciar la solicitud una vez que el usuario enfoca un campo de entrada de texto y quitar todos los encabezados, luego esperar hasta que el usuario presione &#8216;enviar&#8217; antes de enviar los datos que ingresaron.<\/li>\n<li>Env\u00ede gradualmente datos generados en el cliente, como audio, video o datos de entrada.<\/li>\n<li>Recrea los sockets web a trav\u00e9s de HTTP.<\/li>\n<\/ul>\n<p>Pero dado que se trata de una funci\u00f3n de plataforma web de bajo nivel, no se limite a <em>mi<\/em> ideas.  Tal vez pueda pensar en un caso de uso mucho m\u00e1s interesante para la transmisi\u00f3n de solicitudes.<\/p>\n<h2 id=\"try-out-request-streams\"><span class=\"ez-toc-section\" id=\"Pruebe-las-secuencias-de-solicitudes\"><\/span>Pruebe las secuencias de solicitudes <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3 id=\"enabling-support-during-the-origin-trial-phase\"><span class=\"ez-toc-section\" id=\"Habilitar-el-apoyo-durante-la-fase-de-prueba-de-origen\"><\/span>Habilitar el apoyo durante la fase de prueba de origen <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Los flujos de solicitudes de recuperaci\u00f3n est\u00e1n disponibles en una prueba de origen a partir de Chrome 85. Se espera que la prueba de origen finalice en Chrome 87.<\/p>\n<p>Las pruebas de Origin le permiten probar nuevas funciones y brindar comentarios sobre su usabilidad, practicidad y efectividad a la comunidad de est\u00e1ndares web.  Para obtener m\u00e1s informaci\u00f3n, consulte el <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/GoogleChrome\/OriginTrials\/blob\/gh-pages\/developer-guide.md\">Gu\u00eda de pruebas de Origin para desarrolladores web<\/a>.  Para inscribirse en esta u otra prueba de origen, visite el <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developers.chrome.com\/origintrials\/#\/trials\/active\">p\u00e1gina de registro<\/a>.<\/p>\n<h3 id=\"register-for-ot\"><span class=\"ez-toc-section\" id=\"Registrese-para-la-prueba-de-origen\"><\/span>Reg\u00edstrese para la prueba de origen <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developers.chrome.com\/origintrials\/#\/view_trial\/-7680889164480380927\">Solicita un token<\/a> por tu origen.<\/li>\n<li>Agrega el token a tus p\u00e1ginas.  Hay dos maneras de hacerlo:\n<ul>\n<li>Agregar un <code>origin-trial<\/code> <code>&lt;meta&gt;<\/code>  etiqueta al encabezado de cada p\u00e1gina.  Por ejemplo, esto puede verse as\u00ed: <br \/><code>&lt;meta http-equiv=\"origin-trial\" content=\"TOKEN_GOES_HERE\"&gt;<\/code><\/li>\n<li>Si puede configurar su servidor, tambi\u00e9n puede agregar el token usando un <code>Origin-Trial<\/code> Encabezado HTTP.  El encabezado de respuesta resultante deber\u00eda verse as\u00ed:<br \/><code>Origin-Trial: TOKEN_GOES_HERE<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 id=\"enable-flags\"><span class=\"ez-toc-section\" id=\"Habilitacion-a-traves-de-chrome-flags\"><\/span>Habilitaci\u00f3n a trav\u00e9s de chrome: \/\/ flags <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Pruebe las transmisiones de solicitudes en Chrome 85 girando una bandera experimental:<br \/>\n<code>enable-experimental-web-platform-features<\/code>.<\/p>\n<h2 id=\"demo\"><span class=\"ez-toc-section\" id=\"Manifestacion\"><\/span>Manifestaci\u00f3n <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\n  <iframe allow=\"camera; clipboard; clipboard-read; clipboard-write; encrypted-media; geolocation; microphone; midi; vr\" loading=\"lazy\" src=\"https:\/\/glitch.com\/embed\/#!\/embed\/fetch-request-stream?attributionHidden=true&amp;sidebarCollapsed=true&amp;path=index.html&amp;previewSize=100\" style=\"height: 100%; width: 100%; border: 0;\" title=\"fetch-request-stream on Glitch\"><\/iframe>\n<\/p>\n<p>Esto muestra c\u00f3mo puede transmitir datos del usuario al servidor y enviar datos que se pueden procesar en tiempo real.<\/p>\n<p>S\u00ed, vale, no es el ejemplo m\u00e1s imaginativo, solo quer\u00eda mantenerlo simple, \u00bfde acuerdo?<\/p>\n<p>De todos modos, \u00bfc\u00f3mo funciona esto?<\/p>\n<h2 id=\"previously-on-the-exciting-adventures-of-fetch-streams\"><span class=\"ez-toc-section\" id=\"Anteriormente-en-las-emocionantes-aventuras-de-fetch-streams\"><\/span>Anteriormente en las emocionantes aventuras de fetch streams <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><em>Respuesta<\/em> Las transmisiones han estado disponibles en todos los navegadores modernos durante un tiempo.  Le permiten acceder a partes de una respuesta a medida que llegan del servidor:<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const<\/span> response <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> <span class=\"token function\">fetch<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> reader <span class=\"token operator\">=<\/span> response<span class=\"token punctuation\">.<\/span>body<span class=\"token punctuation\">.<\/span><span class=\"token function\">getReader<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><p><span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span> value<span class=\"token punctuation\">,<\/span> done <span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> reader<span class=\"token punctuation\">.<\/span><span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>done<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'Received'<\/span><span class=\"token punctuation\">,<\/span> value<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><\/p><p>console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'Response fully received'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p>Cada <code>value<\/code> es un <code>Uint8Array<\/code> de bytes.  La cantidad de matrices que obtiene y el tama\u00f1o de las matrices depende de la velocidad de la red.  Si tiene una conexi\u00f3n r\u00e1pida, obtendr\u00e1 menos \u00abfragmentos\u00bb de datos m\u00e1s grandes.  Si tiene una conexi\u00f3n lenta, obtendr\u00e1 m\u00e1s fragmentos m\u00e1s peque\u00f1os.<\/p>\n<p>Si desea convertir los bytes en texto, puede usar<br \/>\n<a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/TextDecoder\/decode\"><code>TextDecoder<\/code><\/a>o la transmisi\u00f3n de transformaci\u00f3n m\u00e1s reciente si su <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/caniuse.com\/#feat=mdn-api_textdecoderstream\">los navegadores de destino lo admiten<\/a>:<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const<\/span> response <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> <span class=\"token function\">fetch<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> reader <span class=\"token operator\">=<\/span> response<span class=\"token punctuation\">.<\/span>body<br><span class=\"token punctuation\">.<\/span><span class=\"token function\">pipeThrough<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">TextDecoderStream<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br><span class=\"token punctuation\">.<\/span><span class=\"token function\">getReader<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p><code>TextDecoderStream<\/code>  es una corriente de transformaci\u00f3n que atrapa a todos esos <code>Uint8Array<\/code><br \/>\nfragmenta y los convierte en cadenas.<\/p>\n<p>Las transmisiones son excelentes, ya que puede comenzar a actuar sobre los datos a medida que llegan.  Por ejemplo, si recibe una lista de 100 &#8216;resultados&#8217;, puede mostrar el primer resultado tan pronto como lo reciba, en lugar de esperar los 100.<\/p>\n<p>De todos modos, eso es flujos de respuesta, lo nuevo y emocionante de lo que quer\u00eda hablar es el flujo de solicitudes.<\/p>\n<h2 id=\"streaming-request-bodies\"><span class=\"ez-toc-section\" id=\"Cuerpos-de-solicitud-de-transmision\"><\/span>Cuerpos de solicitud de transmisi\u00f3n <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Las solicitudes pueden tener cuerpos:<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">await<\/span> <span class=\"token function\">fetch<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><br>method<span class=\"token operator\">:<\/span> <span class=\"token string\">'POST'<\/span><span class=\"token punctuation\">,<\/span><br>body<span class=\"token operator\">:<\/span> requestBody<span class=\"token punctuation\">,<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p>Anteriormente, necesitaba todo el cuerpo listo para comenzar antes de poder iniciar la solicitud, pero ahora en Chrome 85 puede proporcionar el suyo <code>ReadableStream<\/code> de datos:<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">function<\/span> <span class=\"token function\">wait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">milliseconds<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">return<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Promise<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">resolve<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token function\">setTimeout<\/span><span class=\"token punctuation\">(<\/span>resolve<span class=\"token punctuation\">,<\/span> milliseconds<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><p><span class=\"token keyword\">const<\/span> stream <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ReadableStream<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">async<\/span> <span class=\"token function\">start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">controller<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token keyword\">await<\/span> <span class=\"token function\">wait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1000<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>controller<span class=\"token punctuation\">.<\/span><span class=\"token function\">enqueue<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'This '<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">await<\/span> <span class=\"token function\">wait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1000<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>controller<span class=\"token punctuation\">.<\/span><span class=\"token function\">enqueue<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'is '<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">await<\/span> <span class=\"token function\">wait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1000<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>controller<span class=\"token punctuation\">.<\/span><span class=\"token function\">enqueue<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'a '<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">await<\/span> <span class=\"token function\">wait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1000<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>controller<span class=\"token punctuation\">.<\/span><span class=\"token function\">enqueue<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'slow '<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">await<\/span> <span class=\"token function\">wait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1000<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>controller<span class=\"token punctuation\">.<\/span><span class=\"token function\">enqueue<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'request.'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>controller<span class=\"token punctuation\">.<\/span><span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">pipeThrough<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">TextEncoderStream<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p><p><span class=\"token function\">fetch<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><br>method<span class=\"token operator\">:<\/span> <span class=\"token string\">'POST'<\/span><span class=\"token punctuation\">,<\/span><br>headers<span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token string\">'Content-Type'<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'text\/plain'<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>body<span class=\"token operator\">:<\/span> stream<span class=\"token punctuation\">,<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p>Lo anterior enviar\u00e1 \u00abEsta es una solicitud lenta\u00bb al servidor, una palabra a la vez, con una pausa de un segundo entre cada palabra.<\/p>\n<p>Cada parte del cuerpo de una solicitud debe ser un <code>Uint8Array<\/code> de bytes, entonces estoy usando<br \/>\n<code>pipeThrough(new TextEncoderStream())<\/code> para hacer la conversi\u00f3n por m\u00ed.<\/p>\n<h3 id=\"writable-streams\"><span class=\"ez-toc-section\" id=\"Flujos-grabables\"><\/span>Flujos grabables <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>A veces es m\u00e1s f\u00e1cil trabajar con transmisiones cuando tienes una <code>WritableStream<\/code>.  Puede hacer esto usando una secuencia de &#8216;identidad&#8217;, que es un par legible \/ escribible que toma todo lo que se pasa a su final de escritura y lo env\u00eda al final de lectura.  Puede crear uno de estos creando un <code>TransformStream<\/code> sin ning\u00fan argumento:<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span> readable<span class=\"token punctuation\">,<\/span> writable <span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">TransformStream<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><p><span class=\"token keyword\">const<\/span> responsePromise <span class=\"token operator\">=<\/span> <span class=\"token function\">fetch<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><br>method<span class=\"token operator\">:<\/span> <span class=\"token string\">'POST'<\/span><span class=\"token punctuation\">,<\/span><br>body<span class=\"token operator\">:<\/span> readable<span class=\"token punctuation\">,<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p>Ahora, todo lo que env\u00ede a la secuencia de escritura ser\u00e1 parte de la solicitud.  Esto le permite componer transmisiones juntos.  Por ejemplo, aqu\u00ed hay un ejemplo tonto en el que los datos se obtienen de una URL, se comprimen y se env\u00edan a otra URL:<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><br><span class=\"token keyword\">const<\/span> response <span class=\"token operator\">=<\/span> <span class=\"token keyword\">await<\/span> <span class=\"token function\">fetch<\/span><span class=\"token punctuation\">(<\/span>url1<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span> readable<span class=\"token punctuation\">,<\/span> writable <span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">TransformStream<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><p><br>response<span class=\"token punctuation\">.<\/span>body<br><span class=\"token punctuation\">.<\/span><span class=\"token function\">pipeThrough<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">CompressionStream<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'gzip'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br><span class=\"token punctuation\">.<\/span><span class=\"token function\">pipeTo<\/span><span class=\"token punctuation\">(<\/span>writable<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p><p><br><span class=\"token keyword\">await<\/span> <span class=\"token function\">fetch<\/span><span class=\"token punctuation\">(<\/span>url2<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><br>method<span class=\"token operator\">:<\/span> <span class=\"token string\">'POST'<\/span><span class=\"token punctuation\">,<\/span><br>body<span class=\"token operator\">:<\/span> readable<span class=\"token punctuation\">,<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p>El ejemplo anterior usa <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/chromestatus.com\/feature\/5855937971617792\">flujos de compresi\u00f3n<\/a> para comprimir datos arbitrarios usando gzip.<\/p>\n<h3 id=\"feature-detection\"><span class=\"ez-toc-section\" id=\"Deteccion-de-caracteristicas\"><\/span>Detecci\u00f3n de caracter\u00edsticas <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Si proporciona un objeto de cuerpo que el navegador no maneja espec\u00edficamente, llamar\u00e1 <code>toString()<\/code> en el objeto y utilice el resultado como cuerpo.  Si el navegador no admite secuencias de solicitudes, eso significa que el cuerpo de la solicitud se convierte en<br \/>\n<code>\"[object ReadableStream]\"<\/code> &#8211; probablemente no sea lo que desea enviar al servidor.  Para evitar esto, use la detecci\u00f3n de caracter\u00edsticas:<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const<\/span> supportsRequestStreams <span class=\"token operator\">=<\/span> <span class=\"token operator\">!<\/span><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Request<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">''<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><br>body<span class=\"token operator\">:<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">ReadableStream<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br>method<span class=\"token operator\">:<\/span> <span class=\"token string\">'POST'<\/span><span class=\"token punctuation\">,<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>headers<span class=\"token punctuation\">.<\/span><span class=\"token function\">has<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'Content-Type'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>supportsRequestStreams<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br><span class=\"token punctuation\">}<\/span><\/p><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<div class=\"w-aside w-aside--note\">\n<p>Esto funciona porque el navegador agrega un <code>Content-Type<\/code> encabezado de<br \/>\n<code>text\/plain;charset=UTF-8<\/code> a la solicitud si el cuerpo es texto.  El navegador solo trata el cuerpo como texto si <em>no<\/em> flujos de solicitud de soporte, de lo contrario no agregar\u00e1 un <code>Content-Type<\/code> encabezado en absoluto.<\/p>\n<\/div>\n<h2 id=\"restrictions\"><span class=\"ez-toc-section\" id=\"Restricciones\"><\/span>Restricciones <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Las solicitudes de transmisi\u00f3n son un nuevo poder para la web, por lo que vienen con algunas restricciones:<\/p>\n<h3 id=\"restricted-redirects\"><span class=\"ez-toc-section\" id=\"Redireccionamientos-restringidos\"><\/span>Redireccionamientos restringidos <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Algunas formas de redireccionamiento HTTP requieren que el navegador vuelva a enviar el cuerpo de la solicitud a otra URL.  Para admitir esto, el navegador tendr\u00eda que almacenar en b\u00fafer el contenido de la transmisi\u00f3n, lo que anula el punto, por lo que no hace eso.<\/p>\n<p>En cambio, si la solicitud tiene un cuerpo de transmisi\u00f3n y la respuesta es una redirecci\u00f3n HTTP distinta de 303, la recuperaci\u00f3n se rechazar\u00e1 y la redirecci\u00f3n <em>no<\/em> ser seguido.<\/p>\n<p>Se permiten redirecciones 303, ya que cambian expl\u00edcitamente el m\u00e9todo a <code>GET<\/code> y descartar el cuerpo de la solicitud.<\/p>\n<h3 id=\"http2-only-by-default\"><span class=\"ez-toc-section\" id=\"HTTP-2-solo-por-defecto\"><\/span>HTTP \/ 2 solo por defecto <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>De forma predeterminada, la recuperaci\u00f3n se rechazar\u00e1 si la conexi\u00f3n no es HTTP \/ 2.  Si desea utilizar solicitudes de transmisi\u00f3n a trav\u00e9s de HTTP \/ 1.1, debe participar:<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"highlight-line\"><span class=\"token keyword\">await<\/span> <span class=\"token function\">fetch<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><\/span><br><span class=\"highlight-line\">  method<span class=\"token operator\">:<\/span> <span class=\"token string\">'POST'<\/span><span class=\"token punctuation\">,<\/span><\/span><br><span class=\"highlight-line\">  body<span class=\"token operator\">:<\/span> stream<span class=\"token punctuation\">,<\/span><\/span><br><mark class=\"highlight-line highlight-line-active\">  allowHTTP1ForStreamingUpload<span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><\/mark><br><span class=\"highlight-line\"><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/span><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<div class=\"w-aside w-aside--caution\">\n<p><strong>Precauci\u00f3n:<\/strong><br \/>\n<code>allowHTTP1ForStreamingUpload<\/code>  no es est\u00e1ndar y solo se utilizar\u00e1 como parte de la implementaci\u00f3n experimental de Chrome.<\/p>\n<\/div>\n<p>De acuerdo con las reglas HTTP \/ 1.1, los organismos de solicitud y respuesta deben enviar un<br \/>\n<code>Content-Length<\/code> encabezado, para que el otro lado sepa cu\u00e1ntos datos recibir\u00e1, o cambie el formato del mensaje para usar <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Chunked_transfer_encoding\">codificaci\u00f3n fragmentada<\/a>.  Con la codificaci\u00f3n fragmentada, el cuerpo se divide en partes, cada una con su propia longitud de contenido.<\/p>\n<p>La codificaci\u00f3n fragmentada es bastante com\u00fan cuando se trata de HTTP \/ 1.1 <em>respuestas<\/em>, pero muy raro cuando se trata de <em>peticiones<\/em>.  Debido a esto, Chrome est\u00e1 un poco preocupado por la compatibilidad, por lo que est\u00e1 habilitado por ahora.<\/p>\n<div class=\"w-aside w-aside--note\">\n<p>Esto no es un problema para HTTP \/ 2, ya que los datos HTTP \/ 2 siempre est\u00e1n &#8216;fragmentados&#8217;, aunque llama a los fragmentos<br \/>\n<a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/developers.google.com\/web\/fundamentals\/performance\/http2#streams_messages_and_frames\">marcos<\/a>.  La codificaci\u00f3n fragmentada no se introdujo hasta HTTP \/ 1.1, por lo que las solicitudes con cuerpos de transmisi\u00f3n siempre fallar\u00e1n en las conexiones HTTP \/ 1.<\/p>\n<\/div>\n<p>Dependiendo de c\u00f3mo vaya esta prueba, la especificaci\u00f3n restringir\u00e1 las respuestas de transmisi\u00f3n a HTTP \/ 2 o siempre lo permitir\u00e1 tanto para HTTP \/ 1.1 como para HTTP \/ 2.<\/p>\n<h3 id=\"no-duplex-communication\"><span class=\"ez-toc-section\" id=\"Sin-comunicacion-duplex\"><\/span>Sin comunicaci\u00f3n d\u00faplex <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Una caracter\u00edstica poco conocida de HTTP (aunque, si este es un comportamiento est\u00e1ndar depende de a qui\u00e9n le pregunte) es que puede comenzar a recibir la respuesta mientras a\u00fan env\u00eda la solicitud.  Sin embargo, es tan poco conocido que no est\u00e1 bien soportado por servidores y, bueno, navegadores.<\/p>\n<p>En la implementaci\u00f3n actual de Chrome, no obtendr\u00e1 la respuesta hasta que el cuerpo se haya enviado por completo.  En el siguiente ejemplo <code>responsePromise<\/code> no se resolver\u00e1 hasta que se haya cerrado la transmisi\u00f3n legible.  Todo lo que el servidor env\u00ede antes de ese punto se almacenar\u00e1 en b\u00fafer.<\/p>\n<p><web-copy-code><\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const<\/span> responsePromise <span class=\"token operator\">=<\/span> <span class=\"token function\">fetch<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><br>method<span class=\"token operator\">:<\/span> <span class=\"token string\">'POST'<\/span><span class=\"token punctuation\">,<\/span><br>body<span class=\"token operator\">:<\/span> readableStream<span class=\"token punctuation\">,<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p><\/web-copy-code><\/p>\n<p>La segunda mejor opci\u00f3n para la comunicaci\u00f3n d\u00faplex es realizar una b\u00fasqueda con una solicitud de transmisi\u00f3n y luego realizar otra b\u00fasqueda para recibir la respuesta de transmisi\u00f3n.  El servidor necesitar\u00e1 alguna forma de asociar estas dos solicitudes, como un ID en la URL.  As\u00ed es como funciona la demostraci\u00f3n.<\/p>\n<h2 id=\"potential-issues\"><span class=\"ez-toc-section\" id=\"Problemas-potenciales\"><\/span>Problemas potenciales <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>S\u00ed, entonces &#8230; esta es una caracter\u00edstica nueva, y hoy en d\u00eda no se utiliza mucho en Internet.  A continuaci\u00f3n, se indican algunos problemas que debe tener en cuenta:<\/p>\n<h3 id=\"incompatibility-on-the-server-side\"><span class=\"ez-toc-section\" id=\"Incompatibilidad-en-el-lado-del-servidor\"><\/span>Incompatibilidad en el lado del servidor <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Algunos servidores de aplicaciones no admiten solicitudes de transmisi\u00f3n, y en su lugar esperan a que se reciba la solicitud completa antes de permitirle ver algo, lo que frustra el punto.  En su lugar, utilice un servidor de aplicaciones que admita la transmisi\u00f3n, como<br \/>\n<a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/nodejs.org\/dist\/latest-v14.x\/docs\/api\/http.html#http_class_http_incomingmessage\">NodeJS<\/a>.<\/p>\n<p>\u00a1Pero a\u00fan no est\u00e1s fuera de peligro!  El servidor de aplicaciones, como NodeJS, normalmente se encuentra detr\u00e1s de otro servidor, a menudo llamado \u00abservidor de aplicaciones para el usuario\u00bb, que a su vez puede estar detr\u00e1s de un CDN.  Si alguno de ellos decide almacenar en b\u00fafer la solicitud antes de entregarla al siguiente servidor de la cadena, perder\u00e1 el beneficio de la transmisi\u00f3n de solicitudes.<\/p>\n<p>Adem\u00e1s, si est\u00e1 utilizando HTTP \/ 1.1, es posible que uno de los servidores no est\u00e9 preparado para la codificaci\u00f3n fragmentada y puede fallar con un error.  Pero bueno, al menos puedes probar eso e intentar cambiar de servidor si es necesario.<\/p>\n<p><em>&#8230; largo suspiro &#8230;<\/em><\/p>\n<h3 id=\"incompatibility-outside-of-your-control\"><span class=\"ez-toc-section\" id=\"Incompatibilidad-fuera-de-su-control\"><\/span>Incompatibilidad fuera de su control <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Si est\u00e1 utilizando HTTPS, no necesita preocuparse por los proxies entre usted y el usuario, pero el usuario puede estar ejecutando un proxy en su m\u00e1quina.  Alg\u00fan software de protecci\u00f3n de Internet hace esto para permitirle monitorear todo lo que ocurre entre el navegador y la red.<\/p>\n<p>Puede haber casos en los que los b\u00faferes de este software soliciten cuerpos, o en el caso de HTTP \/ 1.1, no espere una codificaci\u00f3n fragmentada y se rompa de alguna manera interesante.<\/p>\n<p>En este momento, no est\u00e1 claro con qu\u00e9 frecuencia suceder\u00e1 esto, si es que ocurrir\u00e1.<\/p>\n<p>Si desea protegerse contra esto, puede crear una &#8216;prueba de caracter\u00edsticas&#8217; similar a la demostraci\u00f3n anterior, donde intenta transmitir algunos datos sin cerrar la transmisi\u00f3n.  Si el servidor recibe los datos, puede responder a trav\u00e9s de una b\u00fasqueda diferente.  Una vez que esto sucede, sabr\u00e1 que el cliente admite solicitudes de transmisi\u00f3n de un extremo a otro.<\/p>\n<h2 id=\"feedback-welcome\"><span class=\"ez-toc-section\" id=\"Comentarios-bienvenidos\"><\/span>Comentarios bienvenidos <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Los comentarios de la comunidad son cruciales para el dise\u00f1o de nuevas API, as\u00ed que pru\u00e9belo y d\u00edganos lo que piensa.  Si encuentra alg\u00fan error, por favor <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/bugs.chromium.org\/p\/chromium\/issues\/list\">Reportalos<\/a>, pero si tiene comentarios generales, env\u00edelos al <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/groups.google.com\/a\/chromium.org\/forum\/#!forum\/blink-network-dev\">blink-network-dev Grupo de Google<\/a>.<\/p>\n<p>Foto por <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/unsplash.com\/@lauralefurgeysmith?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Laura Lefurgey-Smith<\/a><br \/>\nen<br \/>\n<a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/unsplash.com\/s\/photos\/canoe-stream?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Unsplash<\/a><\/p>\n<p>    <web-feedback additional-questions=\"api\"><\/web-feedback>\n  <\/div>\n","protected":false},"excerpt":{"rendered":"<p>22 de julio de 2020 Actualizado 22 de julio de 2020 Chrome 85 tiene una implementaci\u00f3n experimental de flujos de solicitudes, lo que significa que puede comenzar a realizar una&#8230;<\/p>","protected":false},"author":1,"featured_media":81390,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1356],"tags":[],"class_list":["post-81502","post","type-post","status-publish","format-standard","has-post-thumbnail","category-dev"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.0 (Yoast SEO v28.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Transmitir solicitudes con la API de recuperaci\u00f3n - R Marketing Digital<\/title>\n<meta name=\"description\" content=\"22 de julio de 2020 Actualizado 22 de julio de 2020 Chrome 85 tiene una implementaci\u00f3n experimental de flujos de solicitudes, lo que significa que puede\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Transmitir solicitudes con la API de recuperaci\u00f3n\" \/>\n<meta property=\"og:description\" content=\"22 de julio de 2020 Actualizado 22 de julio de 2020 Chrome 85 tiene una implementaci\u00f3n experimental de flujos de solicitudes, lo que significa que puede\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/\" \/>\n<meta property=\"og:site_name\" content=\"R Marketing Digital\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-03T20:34:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-3359002.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"345\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"R Marketing Digital\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/transmitir-solicitudes-con-la-api-de-recuperacion\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/transmitir-solicitudes-con-la-api-de-recuperacion\\\/\"},\"author\":{\"name\":\"R Marketing Digital\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"headline\":\"Transmitir solicitudes con la API de recuperaci\u00f3n\",\"datePublished\":\"2022-09-03T20:34:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/transmitir-solicitudes-con-la-api-de-recuperacion\\\/\"},\"wordCount\":1826,\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/transmitir-solicitudes-con-la-api-de-recuperacion\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hero-3359002.jpg\",\"articleSection\":[\"Dev\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/transmitir-solicitudes-con-la-api-de-recuperacion\\\/\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/transmitir-solicitudes-con-la-api-de-recuperacion\\\/\",\"name\":\"Transmitir solicitudes con la API de recuperaci\u00f3n - R Marketing Digital\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/transmitir-solicitudes-con-la-api-de-recuperacion\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/transmitir-solicitudes-con-la-api-de-recuperacion\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hero-3359002.jpg\",\"datePublished\":\"2022-09-03T20:34:27+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"description\":\"22 de julio de 2020 Actualizado 22 de julio de 2020 Chrome 85 tiene una implementaci\u00f3n experimental de flujos de solicitudes, lo que significa que puede\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/transmitir-solicitudes-con-la-api-de-recuperacion\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/dev\\\/transmitir-solicitudes-con-la-api-de-recuperacion\\\/#primaryimage\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hero-3359002.jpg\",\"contentUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hero-3359002.jpg\",\"width\":1200,\"height\":345,\"caption\":\"hero-3359002-6081797-jpg\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/\",\"name\":\"R Marketing Digital\",\"description\":\"Agencia SEO | Publicidad redes sociales | Community Management\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rmarketingdigital.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\",\"name\":\"R Marketing Digital\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"caption\":\"R Marketing Digital\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Flux de requ\u00eates avec l&#039;API Fetch - R Marketing Digital","description":"22 juil. 2020 Mis \u00e0 jour le 22 juil. 2020 Chrome 85 a une impl\u00e9mentation exp\u00e9rimentale des flux de requ\u00eates, ce qui signifie que vous pouvez","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/","og_locale":"fr_FR","og_type":"article","og_title":"Transmitir solicitudes con la API de recuperaci\u00f3n","og_description":"22 de julio de 2020 Actualizado 22 de julio de 2020 Chrome 85 tiene una implementaci\u00f3n experimental de flujos de solicitudes, lo que significa que puede","og_url":"https:\/\/rmarketingdigital.com\/fr\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/","og_site_name":"R Marketing Digital","article_published_time":"2022-09-03T20:34:27+00:00","og_image":[{"width":1200,"height":345,"url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-3359002.jpg","type":"image\/jpeg"}],"author":"R Marketing Digital","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rmarketingdigital.com\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#article","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/"},"author":{"name":"R Marketing Digital","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"headline":"Transmitir solicitudes con la API de recuperaci\u00f3n","datePublished":"2022-09-03T20:34:27+00:00","mainEntityOfPage":{"@id":"https:\/\/rmarketingdigital.com\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/"},"wordCount":1826,"image":{"@id":"https:\/\/rmarketingdigital.com\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-3359002.jpg","articleSection":["Dev"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/rmarketingdigital.com\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/","url":"https:\/\/rmarketingdigital.com\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/","name":"Flux de requ\u00eates avec l&#039;API Fetch - R Marketing Digital","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rmarketingdigital.com\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#primaryimage"},"image":{"@id":"https:\/\/rmarketingdigital.com\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-3359002.jpg","datePublished":"2022-09-03T20:34:27+00:00","author":{"@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"description":"22 juil. 2020 Mis \u00e0 jour le 22 juil. 2020 Chrome 85 a une impl\u00e9mentation exp\u00e9rimentale des flux de requ\u00eates, ce qui signifie que vous pouvez","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rmarketingdigital.com\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/rmarketingdigital.com\/dev\/transmitir-solicitudes-con-la-api-de-recuperacion\/#primaryimage","url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-3359002.jpg","contentUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/hero-3359002.jpg","width":1200,"height":345,"caption":"hero-3359002-6081797-jpg"},{"@type":"WebSite","@id":"https:\/\/rmarketingdigital.com\/#website","url":"https:\/\/rmarketingdigital.com\/","name":"Marketing num\u00e9rique","description":"Agence de r\u00e9f\u00e9rencement | Publicit\u00e9 sur les r\u00e9seaux sociaux | Gestion de communaut\u00e9","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rmarketingdigital.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e","name":"Marketing num\u00e9rique","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","caption":"R Marketing Digital"}}]}},"_links":{"self":[{"href":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/wp\/v2\/posts\/81502","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/wp\/v2\/comments?post=81502"}],"version-history":[{"count":0,"href":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/wp\/v2\/posts\/81502\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/wp\/v2\/media\/81390"}],"wp:attachment":[{"href":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/wp\/v2\/media?parent=81502"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/wp\/v2\/categories?post=81502"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/wp\/v2\/tags?post=81502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}