{"data":{"site":{"siteMetadata":{"title":"Gandalf The Blue","author":"ys"}},"markdownRemark":{"id":"a9f560ba-07b3-56ba-9d7e-7ae453d1803f","html":"<p>最近React项目遇到一个问题，当用户在IE11上刷新页面的时候会返回404错误页面。在其他浏览器上能够正常使用。\n错误页面如下:</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/gandalfTheBlue/static/50a7cc7ecaad8e1f7506ed50ac639c5b/e7ea1/404-error.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 590px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 38.14432989690722%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsSAAALEgHS3X78AAABCElEQVQoz42RSW7DMAxFdf8z9AA9TrfdpF15jDU6tmTR+iFlF0WBpqmABxocP2n1ftEgIsSUK9uWkU5yJpRS/oU8ay3Uy+sb1phg3FJxYa1Yv2C+xZq87zvoARKTwTFGNE0LVXbCHAKMMYzGsiyscsOWUrUrJ0YemHN+iOTJlm3XQRHt1TGOV57QoG07DMOIruvZN/L3gJ4RFVL0GxKTJzVKbua9ZwICI80lQfzbecfD/qUw8+rlaCjHl3tdJ80rW0xsjxW/mz4jpUOE1HJDgg0RWjsY66HNYS0TI9+S4+kJkkNUMM83KMeqrOYfIgpP9DRBX6fql7gzX/YnEvfW8e17fFw+MfYD7tUabJ1Ns7rVAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"IE 404 错误页面\"\n        title=\"\"\n        src=\"/gandalfTheBlue/static/50a7cc7ecaad8e1f7506ed50ac639c5b/fb8a0/404-error.png\"\n        srcset=\"/gandalfTheBlue/static/50a7cc7ecaad8e1f7506ed50ac639c5b/1a291/404-error.png 148w,\n/gandalfTheBlue/static/50a7cc7ecaad8e1f7506ed50ac639c5b/2bc4a/404-error.png 295w,\n/gandalfTheBlue/static/50a7cc7ecaad8e1f7506ed50ac639c5b/fb8a0/404-error.png 590w,\n/gandalfTheBlue/static/50a7cc7ecaad8e1f7506ed50ac639c5b/e7ea1/404-error.png 776w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<p>项目背景：<br/>\n1， 利用 create react app 构建<br/>\n2， 部署在tomcat上<br/>\n3， 采用 H5 History 路由<br/></p>\n<p>服务端tomcat重定向的配置:</p>\n<div class=\"gatsby-highlight\" data-language=\"xml\"><pre class=\"language-xml\"><code class=\"language-xml\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>error-page</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>error-code</span><span class=\"token punctuation\">></span></span>404<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>error-code</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>location</span><span class=\"token punctuation\">></span></span>/index.html<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>location</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>error-page</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<hr>\n<p>解决问题的思路很清晰，由于这个错误页面只在IE下面出现，只需要了解该页面出现的机制就行。经过简单的搜索，我发现这个页面是IE 的 <a href=\"https://blogs.msdn.microsoft.com/ieinternals/2010/08/18/friendly-http-error-pages/\">Friendly HTTP Error Pages</a>。<br/></p>\n<p>自从IE5及以后的所有版本，如果服务端返回特定的错误码同时带的错误信息很短的话，IE会对用户显示上面那个更友好的错误页面。\n而对于触发这个友好错误页面的条件有两个, 并且两个条件必须同时满足:</p>\n<ol>\n<li>服务端返回的 HTTP 状态码必须是 [400, 403, 404, 405, 406, 408, 409, 410, 500, 501, 505]</li>\n<li>HTTP 的消息体 (Response body) 的字节长度必须小于一个阙值</li>\n</ol>\n<p>对于状态码 [403,405,410]，默认阈值是256字节，对于响状态码 [400,404,406,408,409,500,501,505]，默认阈值是512字节。</p>\n<p>经过检查，我们项目的index.html的大小果然是小于512字节，当tomcat把404重定向到index.html的时候触发了IE的友好错误页面显示。</p>","timeToRead":1,"frontmatter":{"title":"React 项目在IE11下刷新页面出现404错误","date":"March 09, 2019"},"fields":{"slug":"/refresh-react-project-in-IE11-404-error/","langKey":"en"}}},"pageContext":{"slug":"/refresh-react-project-in-IE11-404-error/","previous":null,"next":{"fields":{"slug":"/on-let-vs-const/","langKey":"en","directoryName":"on-let-vs-const"},"frontmatter":{"title":"let还是const"}},"translations":[]}}