Every once in a while when I'm running my app I get really "REALLY" strange characters in my output instead of the appropriate page. Now I know that this is because of some error, but unfortunately the error doesn't present it's self, but rather just produces strange characters.
Here's an example of a complete page source code.
��������
I�%&/m�{J�J��t��
$ؐ@�����iG#)���eVe]f@�흼��{���{��;�N'���?\fdl��J�ɞ!���?~|?"��Ey�')=��y6����h���u����r���j�fŲIU���<[��2O�2_����]i�ߴ��餚]����l�g���~��O��,[f�Wyq1o-�z���QS� ����iUV�I�M���ԃ�z�>�EV_��Z=J�������T���������f�����Z��gi�r�k�ܷ �ZPW4�����,KO�eS��יy�/���m^+�E eB��c�j�w��,�Vu���Q�$n:@]�uC_��X_����E^��d�Tm[-��;�w�v�V�r�MJY��y���uYP祐���2�����uC����w}V|WI�d��\0��>��m���ւh����%y�i��)��X���d������jUS�z�x^�WŬ������v�Ϛ�$G���^O��qq{�.�0�=��8��f�y6�?��.�r�~;��[Bt�~�/�K��z�|�-��W�ź��Q��&���4B��Q�4o�u��x|wrt�L�Kо$)��Ms�.��4-�ٺ.�4���]>]˷��7!4��IZc�M;N_�y����e�_q��%�LۚC�PE��9��e�j�J[^fe1�r���֏����p߯�uM�3�=B�È�,H�Y���sz�S̨��T�?��}��������k�Ⱊ���p��l�_d�̼/S��[V"p��}J�����pq^��!Z�<5���j��Wd�wc�O�䣏0 ���O/��h�jv��a�����}�J��y��E���zA�h@��45e�e�4?��e�u��vӆ��N����C�b���zE��!���UY��X�s�l���#��?}��Χm����/��u �I���уO��2[Lf����y5�:)�fM����(�Q���}��)!�������d���t|< �
PO������$�ꀜ�?=૬���<���?/�q>���b�7��^��(={Z��Y}��u�=8�u��J��D�c���vt�O���܋����/� �����1ev}RfM3�/�~�h�ϊ ������-�}�����:�����a�\���lZ�<[/��Rv�5K(F������C�b�{;?�{�{;�?{^4- R��|��>�����[6���:���ps�FA�ʻ��7��ehU�+�R�>�0{�����܍��FI;�w�œ��2JӼi�r�>�po?j2��� �]���m��U1{J��/��,�C�������p^W�jm$��0^�7d������:�n��Vd��+�t9c-�x���ٹ��.�W�w�~�3�A�9�vۮ�-��M/=�>��R�������|�wǽy��Y����?8�����{�N��� ��#7��'���/�+�͋UIJa��fy�v�x��]x}?~��1s�u�� �!�p�]���4��/�i]5�y����I�A^U��T_{�?��۹���0=~������e�"�p�i���ﺽ�nr��k�����[z��{#����.��s�@#���M8| G�C�Y�Q7z���m/z������(>>�9Տ7:EG�N�g7?��=�������-�1�9�ir��z�������7vi4�x�76��v�>������z�v0~����3��zn�8����]/�H\� w�q�?�9���հk~3}��3��7�G:���ߤ�~��n���q��}���y������Ō#�6�)��2\���lM���s �p^\��@�Vi3��Rr�'Uc�PDf��h�a�t��:�D�c���җ���E88�UHʹ�7�����j�*_Tm�岼֦4�U]�֬��|yYe� 7����'�����NJl,��
I have never seen this with web forms.
So I did some testing today and found some interesting stuff. First of all, the app was throwing a Null Reference Exception (500). Secondly the local debugger saw the error and threw a yellow screen of death right away. The bad text was being shown on the Staging server which currently runs a Release build.
So basically 500 errors on Release builds with customErrors off on my staging server throws CrAzY characters instead of failing gracefully to the yellow screen of death.
As per @Esteban's answer, here is my compression filter
Namespace Filters
Public Class CompressFilter : Inherits ActionFilterAttribute
''' <summary>
''' GZip compresses each Action when loaded. This satisfies YSlow and
''' PageSpeed.
''' </summary>
''' <param name="filterContext">The filter context.</param>
Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext)
Dim request As HttpRequestBase = filterContext.HttpContext.Request
Dim acceptEncoding As String = request.Headers("Accept-Encoding")
If String.IsNullOrEmpty(acceptEncoding) Then
Return
End If
acceptEncoding = acceptEncoding.ToUpperInvariant()
Dim response As HttpResponseBase = filterContext.HttpContext.Response
If acceptEncoding.Contains("GZIP") Then
response.AppendHeader("Content-encoding", "gzip")
response.Filter = New GZipStream(response.Filter, CompressionMode.Compress)
ElseIf acceptEncoding.Contains("DEFLATE") Then
response.AppendHeader("Content-encoding", "deflate")
response.Filter = New DeflateStream(response.Filter, CompressionMode.Compress)
End If
End Sub
End Class
End Namespace
I'm setting this filter globally on every controller via a Base Controller. The page runs just fine if there are no other 500 errors, but if I have a 500 error peek it's ugly head, I get the funky characters.
Also, sometimes I don't have an error on my development server, but there is one on the Staging server. This happened recently when I didn't have the updated library on the staging server, but it was present on my Dev machine. I can see the errors in the Event Log, but I cannot see it on the web page... even if I set Custom Errors to Off
.
Ok, so now we've discovered that this error comes because my <CompressionFilter()>
doesn't decompress the stream if a 500 error is thrown. Gotta figure out how to decompress my output no matter what.
This is what I did to get around the issue. I'm still trying to find a better way. Place the following code in the global.asax.cs
protected void Application_PreSendRequestHeaders() { HttpResponse response = HttpContext.Current.Response; if (response.Filter is GZipStream && response.Headers["Content-encoding"] != "gzip") response.AppendHeader("Content-encoding", "gzip"); else if (response.Filter is DeflateStream && response.Headers["Content-encoding"] != "deflate") response.AppendHeader("Content-encoding", "deflate"); }
Update Check out the following link for some more information where Rick uses the following to solve the issue. Place the following in your global.asax.cs
protected void Application_Error(object sender, EventArgs e)
{
// Remove any special filtering especially GZip filtering
Response.Filter = null;
}
http://www.west-wind.com/weblog/posts/2011/May/02/ASPNET-GZip-Encoding-Caveats
This looks like it might be an issue with invalid character set encoding being used on the response?
what encoding are you using? Unicode/UTF8 or an asian character set?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With