Skip to main content

Gzip upload on browsers



Today, I faced a problem that I could not upload my archive file with gzip format on Firefox, even it worked on Chrome. I was using macOS. My application had a setting to whitelist accepted files. I’ve already added "application/gzip" to that list. "It’s strange!", I thought.

I finally figured out that my uploaded file's type actually was "application/x-gzip" on Firefox. I also asked my colleagues to check their uploaded files on Window and Ubuntu. Hmm… they were totally different! It was "application/x-compressed" on Window, and was "application/x-compressed-tar" on Ubuntu.

In fact, gzip is already standardized by IANA. There is a note in RFC-6713 as below:

"Some applications have informally used media types such as application/gzip-compressed, application/gzipped, application/x-gunzip, application/x-gzip, application/x-gzip-compressed, and gzip/document to describe data compressed with gzip. The media types defined in this document should replace those media types in future applications."

As you can see, the difference of media types among browsers still persists as of this writing. That was the root cause!

Therefore, I had to added all media types including "application/zip,application/x-gzip,application/x-compressed,application/x-compressed-tar" in my app's whitelist.

Comments

  1. anh làm một blog về sự quan trọng của tiếng anh ( speaking, writing ) đi anh. Một dev có được skill viết như anh thì có được đãi ngộ gì đặc biệt hơn kh ạ

    ReplyDelete
    Replies
    1. Để mình kể cho bạn nghe câu chuyện học tiếng Anh của mình để xem nó quan trọng thế nào với mình nhé. Thực ra, ban đầu động lực học tiếng Anh duy nhất của mình là cố gắng "sống sót" trong môi trường làm việc sử dụng tiếng Anh để giao tiếp. Lúc đó, trong team mình còn "bị đánh giá" là hạng D (trong thang điểm A, B, C, D). Ghê chưa! Nhìn xung quanh sao người ta ai cũng giỏi, ai cũng hay quá, thế là mình hạ quyết tâm học cho bằng được. Trong lúc người ta còn ngủ, mình phải dậy sớm học tiếng Anh; trong lúc người ta nghỉ trưa, mình học tiếng Anh; và trong lúc người ta đi xem phim tối, mình học tiếng Anh. Trong vòng 6 tháng như vậy thì mình đã tự tin ra hẳn, nói được và nghe được. Từ đó, mình cảm thấy tiếng Anh là một thứ gì đó không thể thiếu hằng ngày. Mình có thể đọc sách tiếng Anh, xem phim tiếng Anh, học khoá học tiếng Anh, đi meetup nói tiếng Anh, vân vân. Vậy là khi thành thạo nó thì bây giờ nó trở thành công cụ giúp mình tiếp nhận rất nhiều thông tin, học hỏi được nhiều thứ, và "enjoy" cuộc sống nhiều hơn.

      Trong môi trường sử dụng tiếng Anh để giao tiếp, nếu bạn có tiếng Anh tốt thì bạn mới giao tiếp tốt. Ngôn ngữ cũng giống như protocol trong phần mềm. Bạn phải hiểu và sử dụng đúng protocol thì hệ thống mới hoạt động đúng. Bạn giỏi tiếng Anh, bạn tự tin khi giao tiếp với khách hàng, bạn tự tin viết tài liệu, bạn tư tin xông pha học cái mới, bạn tự tin khi thuyết trình, vân vân. Bạn sẽ được giao nhiều việc quan trọng và mang lại nhiều giá trị cho công ty. Như vậy, vì cái "dich vụ" của bạn quá tốt, chắc chắn bạn phải thoả thuận được "giá cao". :)

      Delete

Post a Comment

Popular posts from this blog

Make simple music program with beep(freq, duration) with Pascal

Pascal is my first programing language when I have studied in high school. It was really exciting for me. :) The Pascal programming language was created by Niklaus Wirth in 1970. It was named after Blaise Pascal, a famous French Mathematician. It was made as a language to teach programming and to be reliable and efficient. Pascal has since become more than just an academic language and is now used commercially . I tried to make a simple music program by using Lazarus IDE on MS Window 7, 64-bit. It frustrated me a few times how difficulty to use Sound command to make a sound. Sound did not work on my compiler and my platform anymore. So far, I just could use beep(freq, duration) from window unit to implement my work. Here is my code. ;) program mysong; uses Windows, crt; const C: Integer = 512; { x = A * EXP(LN(2)/12)} C_: Integer = 542; D: Integer = 574; D_: Integer = 608; E: Integer = 644; F: Integer = 682; F_: Integer = 723; G: Integer = ...

Installing NGINX on macOS

I have heard of a lot of NGINX recently. One of them was it can help for security issues; for sure, it much be more. It so happens that our team has got a ton of user stories from a security audit. It's time to delve into it. What is NGINX? In order to get a basic idea and have some fun , I've just picked some available posts from my favorite Vietnamese blogger communities as below: https://kipalog.com/posts/Cau-hinh-nginx-co-ban---Phan-1 https://viblo.asia/hoang.thi.tuan.dung/posts/ZabG912QGzY6 NGINX (pronounce: Engine-X) is a web server (comparing to IIS, Apache). It can be used as a reverse proxy ( this is what I need for security issues with configuration ), load balancer and more. How to get started? I found the below path for learning NGINX by googling "learn nginx": https://www.quora.com/What-are-some-good-online-resources-to-learn-Nginx In this post, I only went first step. This is installing NGINX on macOS and taking a first look at the confi...

Styling Sort Icons Using Font Awesome for Primefaces' Data Table

So far, Primefaces has used image sprites for displaying the sort icons. This leads to a problem if we want to make a different style for these icons; for example, I would make the icon "arrow up" more blurry at the first time the table loading because I want to highlight the icon "arrow down". I found a way that I can replace these icons with Font Awesome icons. We will use "CSS Pseudo-classes" to achieve it. The hardest thing here is that we should handle displaying icons in different cases. There is a case both "arrow up" and "arrow down" showing and other case is only one of these icons is shown. .ui-sortable-column-icon.ui-icon.ui-icon-carat-2-n-s { background-image: none; margin-left: 5px; font-size: 1.1666em; position: relative; } .ui-sortable-column-icon.ui-icon.ui-icon-carat-2-n-s:not(.ui-icon-triangle-1-s)::before { content: "\f106"; font-family: "FontAwesome"; position: ...

Using Drools to Dynamically Manipulate Metadata of JSF Components

The post is just an approach to change metadata (e.g maxlength, required, etc) of JSF components (e.g. inputText, selectOneMenue, etc) by Drools. Project structure Tools being used Java version 1.8.0_131 Apache Maven 3.5.0 Apache Tomcat 8.0.16 Don't forget to configure your confidential information on  these following files: pom.xml, settings.xml (Maven) and tomcat-users.xml (Tomcat). For example: Source code https://github.com/vnnvanhuong/java_lab/tree/master/jsfdrools

Java Core - Top 10 Questions Every Developer Should Know

#RandomlyPickedByMe What is the difference between Javascript and Java? Difference between StringBuilder and StringBuffer? Why do I get "SomeType@a3fde" when I print my code? Why is String immutable? Why "equals" method when we have "==" operator? Is List<Dog> a subclass of List<Animal>? Why shouldn't we use raw type? Is Java “pass-by-reference” or “pass-by-value”? What's the advantage of a Java enum versus a class with public static final fields? Why "double x = 0.1 + 0.2" and result of print(x) is 0.30000000000000004? 1. What is the difference between Javascript and Java? Holy crap! (Vietnamese: Thế quái nào lại có câu hỏi ngớ ngẩn vậy chứ?) "Java and Javascript are similar like Car and Carpet are similar." - Greg Hewgill (on StackOverflow) 2. Difference between StringBuilder and StringBuffer String is immutable. StringBuilder and StringBuffer are mutable. StringBuffer is thread-safe. String...