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

Selenium - Override javascript functions to ignore downloading process

I have got an issue with downloading process on IE 8. This browser blocks my automatic-download functionality on my app so that I could not work with my test case any more after that. In my case, I didn't care about the file is downloaded or not, I just focus on the result after downloading process finished successfully. Therefore, I found a solution to ignore this process so that I can work normally. I use Primefaces, here is the remote command to trigger the download process <p:remoteCommand name="cmdGenerateDocument" actionListener="#{logic.onGenerateDocument}" update="xrflDocumentCreationPanel" oncomplete="clickDownloadButton();"/> The following is my test case: @Test public void shouldUpdateStep6ToWarningIfStep1IsValidAfterFinished(){ MainPage mainPage = new MainPage(); waitForLoading(mainPage.getDriver()); EmployeeDetailPage empDetailPage = new EmployeeDetailPage(); waitForLoading(empDetailPage.getDriver()); e...

My must-have apps for daily work

There is no doubt that cool apps can help us be more productive and enjoyable at work. For the time being, I really love the following apps which are used by me almost every day. 1. A personal Kanban In fact, a personal kanban is the most useful app for me. Why does it matter? It is not just a to-do list, but it keeps me motivated every day because it helps me be able to know what my "big picture" is. I usually set up my plans together with a path to reach them.  KanbanFlow  is my preferred tool. KanbanFlow 2. A terminal Needless to say, a terminal is a must-have app for every developer, especially the ones use macOS/Linux. Due to its importance, I love to decorate and enhance it to be super exciting with various tools such as  iTerm ,  oh-my- zsh , and  thefuck . ;) iTerm + oh-my-zsh 3. A documentation "ecosystem" As a developer, I can not remember all things that I have experimented a day. Moreover, a document is really useful for sharing an...

Regex - Check a text without special characters but German, French

Special characters such as square brackets ([ ]) can cause an exception " java.util.regex.PatternSyntaxException " or something like this if we don't handle them correctly. I had met this issue. In my case, my customers want our application should allow some characters in German and French even not allow some special characters. The solution is that we limit the allowed characters by showing the validation message on GUI. For an instance, the message looks like the following: "This field can't contain any special characters; only letters, numbers, underscores (_), spaces and single quotes (') are allowed." I used Regular Expression to check it. For entering Germany and French, I actually don't have this type of keyboard, so I referred these sites: * German characters: http://german.typeit.org/ * French characters: http://french.typeit.org/ Here is my code: package vn.nvanhuong.practice; import java.util.regex.Matcher; import java.util...

How I did customize "rasa-nlu-trainer" as my own tool

Check out my implementation here Background I wanted to have a tool for human beings to classify intents and extract entities of texts which were obtained from a raw dataset such as Rocket.chat's conversation, Maluuba Frames or  here . Then, the output (labeled texts) could be consumed by an NLU tool such as Rasa NLU. rasa-nlu-trainer was a potential one which I didn't need to build an app from scratch. However, I needed to add more of my own features to fulfill my needs. They were: 1. Loading/displaying raw texts stored by a database such as MongoDB 2. Manually labeling intents and entities for the loaded texts 3. Persisting labeled texts into the database I firstly did look up what rasa-nlu-trainer 's technologies were used in order to see how to implement my mentioned features. At first glance rasa-nlu-trainer was bootstrapped with Create React App. Create React App is a tool to create a React app with no build configuration, as it said. This too...

Selenium - Use Explicit Waits for checking elements quickly disappear like loading icon

I have a table that is displayed a list of competence groups. When I click on a competence group, it will display a table that contains a lot of criteria belong to the competence group. Each times I click on a competence group, a "loading" icon is displayed while waiting for all criteria is fully displayed. <div id="loading" style="display: none;"> <div></div> <div></div> I tried to write a Selenium test to make sure this behavior is covered. I saw that the loading icon element is always available on DOM tree because I just used Jquery to handle its displaying. Beside that, the loading icon is appeared dynamically and quickly disappear afterwards. It is hard to checking the visibility on GUI of loading icon. By normal way that I frequently used, the code looks like: public boolean isLoadingIconDisplayed() { List<WebElement> loadingIcons = driver.findElements(By.id("loading")); if(!loadingIcons.isE...