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

Creating a Chatbot with RiveScript in Java

Motivation "Artificial Intelligence (AI) is considered a major innovation that could disrupt many things. Some people even compare it to the Internet. A large investor firm predicted that some AI startups could become the next Apple, Google or Amazon within five years"   - Prof. John Vu, Carnegie Mellon University. Using chatbots to support our daily tasks is super useful and interesting. In fact, "Jenkins CI, Jira Cloud, and Bitbucket" have been becoming must-have apps in Slack of my team these days. There are some existing approaches for chatbots including pattern matching, algorithms, and neutral networks. RiveScript is a scripting language using "pattern matching" as a simple and powerful approach for building up a Chabot. Architecture Actually, it was flexible to choose a programming language for the used Rivescript interpreter like Java, Go, Javascript, Python, and Perl. I went with Java. Used Technologies and Tools Oracle JDK 1.8...

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: ...

How to convert time between timezone in Java, Primefaces?

I use the calendar Primefaces component with timeOnly and timeZone attributes for using only hour format (HH:mm). Like this: <p:calendar id="xabsOvertimeTimeFrom" pattern="HH:mm" timeOnly="true" value="#{data.dateFrom}" timeZone="#{data.timeZone}"/> We can convert the value of #{data.dateFrom} from GMT/UTC time zone to local, conversely, from local time zone to GMT/UTC time zone. Here is my functions: package vn.nvanhuong.timezoneconverter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class TimeZoneConverter { /** * convert a date with hour format (HH:mm) from local time zone to UTC time zone */ public static Date convertHourToUTCTimeZone(Date inputDate) throws ParseException { if(inputDate == null){ return null; } Calendar calendar = Calendar.getInstance(); calendar.setTime(inputDate); int ...

Sharing a virtualenv across several Python projects using Pipenv

There is a standard library for all projects in Python. However, several projects don’t always have the same dependencies all the time. That is where virtual environments come to play. You can follow this official document to use two separated tools  virtualenv and pip to  fulfill that need. My preferred alternative is to use pipenv . Pipenv is easy to use and convenient. The following are my steps to make a shared virtualenv for my all projects which requires the same dependencies. Step 1. Create an isolated virtualenv. python -m venv my-shared-env Step 2. Create a symbolic link to the created virtualenv. cd project_1 ln -s ~/.local/share/virtualenvs/my-shared-env .venv I have encountered the following issue at step 1. FileNotFoundError: [Errno 2] No such file or directory: '{my_project_path}/.venv/bin/pip': '{my_project_path}/.venv/bin/pip' The root cause was I tried to create virtualenv by running pipenv install and renaming the generated virtualenv to ...

Functional programming in Java 8

In my previous post , we discussed about why we should consider to use functional programming. Now, let's delve into what functional programming in Java is. What is pure functional programming? Shortly,  f unctional programming is programming using functions. A function corresponds to a mathematical function such as log, sin. Basically, it takes zero or more arguments, give one or more result, and has no side effects. We can't completely program in pure functional style in Java Why?  For example, calling Scanner.nextLine twice typically gives different result. So, it's just called "functional-style programming". How is that? - There is no mutating structures visible to callers. That means your side effect may not be visible to a program, but it's visible to the programmer in terms of slower execution. - A function or method shouldn't throw any exceptions (follows the concept "pass arguments, return result"). We can use types like Opti...