HTTP Header là gì?

HTTP là viết tắt của HyperText Transfer Protocol. Là một giao thức cơ bản mà World Wide Web sử dụng (như bạn thấy, tất cả các địa chỉ web đều có phần mở đầu là http:// hoặc https://). HTTP xác định cách các thông điệp (như các file văn bản, hình ảnh đồ hoạ, âm thanh, video, và các file multimedia ...) được định dạng và truyền tải ra sao, và những hành động nào mà các Webserver và các trình duyệt web (browser) phải làm để đáp ứng lại.

HTTP Header là một phần cốt lõi của HTTP Request và HTTP Response, trong mỗi HTTP Header đều kèm theo các thông tin phản hồi và yêu cầu của phía client và server.

Các phương thức truy vấn của HTTP

GET

Phương thức này dùng để truy xuất các tập tin như HTML, CSS, Javascript và hình ảnh ...

Ví dụ, khi truy cập vào địa chỉ example.com/tutorials, dòng đầu tiên trong HTTP Request của bạn sẽ có dạng như sau:

[code type="HTTP"]GET /tutorials/ HTTP/1.1[/code]

POST

Phương thức này dùng để gửi dữ liệu đến server. Phương thức POST thường được gửi đến server dưới dạng form, ví dụ:

[code type="HTML"]<form method="POST" action="login.php"> Username: <input type="text" name="username" /> Email: <input type="text" name="email" /> <input type="submit" name="action" value="Submit" /> </form>[/code]

Lúc này HTTP Request sẽ có dạng như sau:

[code type="HTTP"]POST /login.php HTTP/1.1 Host: example.com User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://example.com/test.php Content-Type: application/x-www-form-urlencoded Content-Length: 43 first_name=John&last_name=Doe&action=Submit[/code]

HEAD

Phương thức này dùng để lấy thông tin về các header. Cách hoạt động của HEAD cũng giống như GET. Nhưng phía server chỉ trả về các thông tin của header, ví dụ:

[code type="HTTP"]HTTP/1.1 200 OK Date: Mon, 18 Aug 2013 22:44:11 GMT Server: Apache/1.3.26 (Unix) Expires: Thu, 19 Nov 1981 08:52:00 GMT Pragma: no-cache Content-Language: EN Connection: close Content-Type: text/html; charset=ISO-8859-1 [/code]

PUT

Phương thức này dùng để upload 1 file nào đó lên server.

OPTIONS

Khi sử dụng phương thức này phía server sẽ phản hồi một dòng Allow kèm theo các phương thức mà phía client có thể sử dụng, ví dụ:

[code type="HTTP"] HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Tue, 31 Oct 2013 08:00:29 GMT Connection: close Allow: GET, HEAD, POST, TRACE, OPTIONS Content-Length: 0 [/code]

HTTP Status Code

Trong mỗi HTTP Response đều chứa một status code, các status code này cho biết kết quả truy vấn mà server trả về. Các status code được chia thành 5 nhóm:

  • 1xx: Thông tin.
  • 2xx: Truy vấn thành công.
  • 3xx: Client được chuyến hướng (redirect) đến một địa chỉ web khác.
  • 4xx: Truy vấn này có lỗi.
  • 5xx: Server bắt gặp lỗi trong khi thực hiện truy vấn.

200 OK

Truy vấn thành công.

301 Moved Permanently

URL được yêu cầu đã chuyển vĩnh viễn tới một URL mới và trong tương lai, nếu client muốn truy cập tài nguyên của URL này thì nên sử dụng URL đã được chuyển hướng (redirect).

304 Not Modified

Chỉ dẫn trình duyệt sử dụng bản sao của trang web trong bộ nhớ cache mà trình duyệt đã lưu trong lần truy cập trước đó.

400 Bad Request

Bạn sẽ nhìn thấy status code này nếu như gửi một truy vấn không hợp lệ lên web server.

401 Unauthorized

Nếu như truy cập vào một trang web yêu cầu nhập mật khẩu và bạn sẽ thấy status code này nếu như nhập sai.

403 Forbidden

Bạn sẽ nhận được status code này truy cập vào một địa chỉ cấm của Server. Địa chỉ web này không được phép truy cập.

403 Forbidden

404 Not Found

Một truy vấn không được tìm thấy trên server.

405 Method Not Allowed

Bạn đang sử dụng một phương thức mà web server không hỗ trợ. Ví dụ nếu bạn sử dụng phương thức POST mà web server không hỗ trợ thì bạn sẽ thấy status code này.

500 Internal Server Error

Server đã bắt gặp lỗi trong khi thực hiện truy vấn được gửi từ phía client.

503 Service Unavailable

Ứng dụng trên server không phản hồi lại truy vấn của client hoặc có thể ứng dụng này không hoạt động nữa.

HTTP Request

Toàn bộ các thông tin của HTTP Request và HTTP Response đều bao gồm 1 hoặc nhiều các header. Được cách nhau bằng mỗi dòng riêng biệt. Ví dụ sau của HTTP Request:

[code type="HTTP"]GET /books/search.asp?q=example HTTP/1.1 Accept: image/gif, image/xxbitmap, image/jpeg, image/pjpeg, application/xshockwaveflash, application/vnd.msexcel, application/vnd.mspowerpoint, application/msword, */* Referer: http://example.com/books/default.asp Accept-Language: en-gb,en-us;q=0.5 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) Host: example.com Cookie: lang=en; JSESSIONID=0000tI8rk7joMx44S2Uu85nSWc_:vsnlc502[/code]
  • Dòng đầu tiên cho thấy đang sử dụng phương thức GET. Phiên bản HTTP được sử dụng là 1.1, các phiên bản của HTTP gồm 1.0 và 1.1. Nhiều trình duyệt web mặc định sử dụng phiên bản 1.1.
  • Referer cho ta biết rằng URL trên có nguồn gốc từ địa chỉ nào. Ở ví dụ trên Referer cho thấy truy vấn /books/search.asp?q=example được gửi từ địa chỉ http://example.com/books/default.asp
  • User-Agent dùng để cung cấp cho web server biết là ta đang dùng trình duyệt web nào. Trong đoạn User-Agent trên cho thấy rằng ta đang sử dụng Windows XP và trình duyệt IE 7. (Tìm hiểu thêm)
  • Host cho biết bạn đang gửi truy vấn đến host nào. Điều này rất hữu ích nếu như nhiều trang web cùng đặt chung 1 web server.
  • Cookie được gửi lại lên web server nếu như trước đây đã từng truy cập vào địa chỉ này.

HTTP Response

Sau khi client gửi HTTP Request lên server thì server sẽ gửi lại HTTP Response.

Ví dụ:

[code type="HTTP"] HTTP/1.1 200 OK Date: Tue, 17 Dec 2013 03:30:53 GMT Server: IBM_HTTP_SERVER/1.3.26.2 Apache/1.3.26 (Unix) Set-Cookie: tracking=tI8rk7joMx44S2Uu85nSWc Pragma: no-cache Expires: Thu, 01 Jan 1970 00:00:00 GMT Content-Type: text/html;charset=ISO-8859-1 Content-Language: en-US Content-Length: 24246 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="en"> <head> <meta http-equiv="Content-Type" content=”text/html; charset=iso-8859-1”> [/code]
  • Dòng đầu tiên là phiên bản HTTP 1.1 được sử dụng. Một status code là 200 cho biết là truy vấn này thành công.
  • Server cho biết thông tin về web server. Ở ví dụ trên web server được sử dụng là Apache và hệ điều hành Unix. Tuy nhiên thông tin về web server có thể không chính xác.
  • Pragma ở ví dụ cho thấy trình duyệt web không lưu trữ các phản hồi (response) nào trong bộ nhớ cache.
  • Content-Type cho thấy rằng phần thông tin trên gồm có HTML.
  • Content-Length cho biết độ dài của gói tin phản hồi từ phía server gửi về, được tính bằng byte.

HTTP Header trong HTTP Request

Accept-Encoding

[code type="HTTP"]Accept-Encoding: gzip,deflate[/code]

Thông báo cho web server biết là phía client chấp nhận loại định dạng mã hoá nào.

Ví dụ trên cho thấy là phía client chấp nhận định dạng gzip, việc này có thể làm tiết kiệm băng thông.

Accept-Language

[code type="HTTP"]Accept-Language: en-gb,en-us;q=0.5[/code]

Header cho biết ngôn ngữ mặc định của phía client. Nếu như trang web có nhiều ngôn ngữ thì phía client sẽ được chuyển hướng đến ngôn ngữ phù hợp hơn.

If-Modified-Since

Nếu như nội dung trang web được trình duyệt lưu lại trong bộ nhớ cache. Và lần sau nếu truy cập nữa thì trình duyệt sẽ gửi:

[code type="HTTP"]If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT[/code]

Nếu như không có bất kỳ thay đổi nào thì server sẽ gửi một status code 304. Sau đó trình duyệt sẽ load nội dung được lưu trong bộ nhớ cache đã lưu trước đó.

User Agent

[code type="HTTP"]User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)[/code]

Đoạn header trên có thể cho ta biết về thông tin sau: trình duyệt, hệ điều hành. Đây chính là lý do tại sao các web server biết người dùng đang dùng hệ điều hành và trình duyệt gì. Ví dụ nếu như web server phát hiện người dùng đang dùng trình duyệt trên điện thoại thì sẽ chuyển hướng đến phiên bản mobile của trang web.

Cookie

[code type="HTTP"]Cookie: lang=en; JSESSIONID=0000tI8rk7joMx44S2Uu85nSWc_:vsnlc502[/code]

Nếu như trước đó bạn đã truy cập vào một trang web nào đó thì cookie này sẽ gửi lên web server.

Host

Tên hostname mà phía client muốn gửi HTTP Request. Hostname này bao gồm domain và subdomain.

Vd:

[code type="HTTP"]Host: example.com[/code]

Referer

Nếu như bạn truy cập vào địa chỉ example.com/books/default.asp và click bất kỳ liên kết nào thì Referer Header sẽ là:

[code type="HTTP"]Referer: http://example.com/books/default.asp[/code]

HTTP Header trong HTTP Response

Content-Length

Web server thông báo cho phía client về dung lượng của gói tin gửi cho phía client. Điều này rất tốt cho việc download vì trình duyệt có thể dự đoán mất bao nhiêu thời gian để download. Ví dụ:

[code type="HTTP"]Content-Length: 24246[/code]

Content-Type

Header này cho biết thông tin về định dạng của văn bản. Ví dụ nếu như là một trang html thì kết quả sẽ trả về là:

[code type="HTTP"]Content-Type: text/html;charset=ISO-8859-1[/code]

text/html là một trong các định dạng thường gặp nhiều. Ngoài ra header này còn có định dạng hình ảnh:

[code type="HTTP"]Content-Type: image/gif[/code]

Content-Encoding

Header này trả về một định dạng mã hoá nội dung, ví dụ:

[code type="HTTP"]Content-Encoding: gzip[/code]

Etag

Header này dùng để lưu trữ bộ nhớ trong cache, ví dụ:

[code type="HTTP"]Etag: "pub1259380237;gz"[/code]

Khi server gửi header này cho phía client thì trình duyệt sẽ lưu lại giá trị này lại. Lần sau nếu như còn truy cập tiếp thì trình duyệt sẽ gửi HTTP Request sau:

[code type="HTTP"]If-None-Match: "pub1259380237;gz"[/code]

Nếu như giá trị của header này hợp với server thì client nhận status code 304. Lúc này trình duyệt sẽ load nội dụng từ trong bộ nhớ cache mà không cần nhờ tới server.

Expires

Thông báo cho trình duyệt biết các nội dung này có hiệu lực trong bao lâu kể từ lúc phía server phản hồi lại, ví dụ:

[code type="HTTP"]Expires: Thu, 01 Jan 1970 00:00:00 GMT[/code]

Last-Modified

Lần cuối cùng đoạn văn bản được chỉnh sửa, thời gian định dạng trong GMT, ví dụ:

[code type="HTTP"]Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT[/code]

Location

Header này được sử dụng để chuyển hướng (redirect). Với status code là 301 hoặc 302.

Pragma

Cho phép trình duyệt có được lưu vào trong bộ nhớ cache không. Ví dụ:

[code type="HTTP"]Pragma: no-cache[/code]

Set-Cookie

[code type="HTTP"]Set-Cookie: tracking=tI8rk7joMx44S2Uu85nSWc[/code]

Web server sẽ gửi cookie cho phía client và phía client sẽ gửi cookie này lại cho web server trong các lần truy cập tiếp theo.

Server

[code type="HTTP"]Server: IBM_HTTP_SERVER/1.3.26.2  Apache/1.3.26 (Unix)[/code]

Cung cấp thông tin về server và hệ điều hành được sử dụng.

1 comment:

Powered by Blogger.