HTTP Methods

Chào mừng các bạn đã quay trở lại với chuyên mục WebDevTips số thứ 3 của CLB WebDev Studios. 
Ở chuyên mục tuần trước về “Hành trang cần thiết cho Lập trình Web” chúng ta đã hiểu cơ bản cấu trúc của một trang web và một vài công cụ, ngôn ngữ phục vụ cho việc lập trình web rồi đúng không? Nếu bạn nào bỏ lỡ thì xem lại bài viết tại đây  nhé! 

Vậy có khi nào các bạn tự hỏi tại sao chỉ cần nhập URL với vài từ, ví dụ: http://webdevstudios.org/ thì hiển thị ra được cả nguyên trang web với đủ thứ thông tin, dữ liệu không? Và để giải ngố cho các bạn thì hôm nay chúng ta sẽ cùng tìm hiểu về một chủ đề hót hòn họt là:

 


HTTP Methods


A. HTTP là gì và nó hoạt động ra sao


I. HTTP là gì?


HTTP là gì? Có "ăn" được không :/

HTTP là gì? “Ăn” được không?


HTTP (Hypertext Transfer Protocol) là giao thức thuộc lớp ứng dụng trong bộ giao thức TCP/IP. HTTP là giao thức chuẩn internet mà cho phép web client và web server có thể liên lạc và hiểu được nhau.
Phiên bản đầu tiên của HTTP là HTTP/0.9, từ lúc công bố đến nay đã trải qua nhiều phiên bản 1.x (1.0, 1.1, 1.2, 1.3) và hiện tại phiên bản là HTTP/2.x. Trong phạm vi bài viết mình sẽ nói về phiên bản HTTP/1.1, là phiên bản mà hiện tại vẫn đang là phổ biến nhất.

II. Hoạt động của HTTP


1. HTTP Session

Phiên hoạt động của HTTP

Phiên hoạt động của HTTP


Một phiên HTTP (http session) là một chuỗi các giao dịch yêu cầu – phản hồi (request-response). Một HTTP client khởi tạo một request bằng cách thiết lập một kết nối TCP đến một cổng trên server (mặc định là cổng 80). HTTP server lắng nghe trên cổng đó mà chờ một thông điệp request. Khi nhận được request, server gửi lại một dòng trạng thái, như là “HTTP/1.1 200 OK” đến client và một thông điệp cho riêng nó. Nội dung của thông điệp thường là thông tin request, mặc dù một thông báo lỗi hoặc thông tin khác cũng có thể được trả lại.
Trước đây, một phiên HTTP chỉ thực hiện được một HTTP request và response. Hiện nay, web server sử dụng 2 phương pháp multi-threading hoặc multi-processing hoặc kết hợp cả 2 phương pháp để phép một phiên kết nối client có thể gửi nhiều request mà chưa cần response từ server và ngược lại.

2. HTTP Request Methods

Mô hình hoạt động của phương thức HTTP Request

Mô hình các phương thức hoạt động của HTTP Request


HTTP định nghĩa các phương thức để chỉ ra các hành động mong muốn được thực hiện trên tài nguyên được xác định.Thông thường, các tài nguyên tương ứng với một tập tin hoặc đầu ra của một thực thi nằm trên máy chủ. HTTP/1.1 định nghĩa các phương thức: GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE và CONNECT. Trong đó 2 phương thức GET và POST được sử dụng nhiều nhất.

 

 

Bảng mô tả ngắn gọn về hành động của các phương thức HTTP

Phương thức Hoạt động
GET Được sử dụng lấy tài nguyên từ server
HEAD Được sử dụng để lấy phần header mà không có phần body
POST Trình dữ liệu để xử lý đến tài nguyên được xác định
PUT Cho phép client upload tệp tin mới lên web server
DELETE Yêu cầu web server xóa tài nguyên được xác định
CONNECT Có thể cho phép client sử dụng website như một proxy
OPTIONS Trả lại danh sách các phương thức HTTP mà được bật trên web server
TRACE Dội lại cho client bất cứ chuỗi nào được gửi tới server

2.1 GET

Phương thức GET được sử dụng để lấy thông tin từ Server bởi sử dụng một URI đã cung cấp. Các yêu cầu sử dụng GET chỉ nhận dữ liệu và không có tác dụng khác. Server phản hồi lại yêu cầu từ client, phản hồi chứa thông tin về trạng thái và có thể cũng chứa cả nội dung được yêu cầu.
*Giải ngố về phương thức GET 
Giống như việc mình nhập URL để xem một trang tin tức có sẵn trên mạng vậy thôi 
Ex: http://webdevstudios.org/phuong-thuc-http
Đây là phương thức GET, lấy dữ liệu là bài viết ở WebServer và gửi trả về 1 thẻ Tag có chứa địa chỉ dữ liệu cho trang này.

2.2 POST

Phương thức POST yêu cầu web server chấp nhận và lưu trữ các dữ liệu kèm theo trong phần body của request message được xác định bởi URI. POST thường được sử dụng khi upload một tệp tin hoặc submit các web form, nhóm tin, chủ đề bình luận,..
*Giải ngố về phương thức POST:
Này dễ quá cần gì giải thích phải không nào =))

2.3 PUT

Phương thức PUT yêu cầu các thực thể kèm theo được lưu trữ dưới URI được cấp. Nếu URI tham chiếu đến tài nguyên đang tồn tại, nó sẽ được sửa đổi. Nếu URI không trỏ đến một tài nguyên tồn tại, khi đó web server sẽ tạo tài nguyên với URI đó. Nếu một tài nguyên được tạo, server sẽ phản hồi cho user agent mã trạng thái 201(created). Nếu một tài nguyên đang tồn tại được sửa đổi, thì mã trạng thái phản hồi là 200 (OK) hoặc 204 (No content).
Sự khác nhau cơ bản giữa POST và PUT nằm ở ý nghĩa của các Request-URI.
– POST request xác định tài nguyên mà sẽ xử lý các thực thể kèm theo.
– Ngược lại, các URI trong PUT request xác định các thực thể kèm theo với các request – user agent biết cái gì URI được dự định và các máy chủ không phải cố gắng để ứng dụng các request đến tài nguyên khác.
Dưới đây là ví dụ request và response phương thức PUT
*Giải ngố về phương thức PUT:
Hiểu nôm na là thằng POST thì tạo mới thông tin được gửi trên server còn thằng PUT là ghi đè tất cả thông tin của đối tượng với những gì được gửi lên.
+ Request:
PUT /test.txt HTTP/1.1
Host: example.com
Content-Length: 14
TEST
+ Reponse:
HTTP/1.1 201 Created
Location: /test.txt

Nếu phương thức PUT được bật trên web server, thì attacker có thể sửa đổi tài nguyên trên máy chủ hoặc thêm mã độc trên máy chủ đó (ví dụ upload tệp tin mà thực thi dòng lệnh như gọi lệnh cmd.exe)


2.4 DELETE

Phương thức DELETE yêu cầu web server xóa tài nguyên được xác định với Request-URI. Một phản hồi thành công sẽ là 200 (OK) nếu phản hồi bao gồm một thực thể mô tả trạng thái, 202 (Accept) nếu hành động chưa được xuất hoặc 204 (No content) nếu hành động đã được xuất nhưng phản hồi không bao gồm một thực thể.
Phương pháp này không đảm bảo rằng thao tác được thực hiện, ngay cả khi mã trạng thái từ máy chủ thông báo hành động đã thực hiện thành công.
*Giải ngố về phương thức DELETE:
De le te đã nói lên tất cả rồi =))
+ Request:
DELETE /test.txt HTTP/1.1
Host:example.com
+ Response:
HTTP/1.1 200 OK
Cache-Control: no-cache
Cache-Control: no-store
Date: Fri, 9 Dec 2016 10:54:46 GMT
[…]
OK

Phương thức này cho phép client xóa một tệp tin trên web server. Attacker có thể khai thác nó đơn giản và trực tiếp deface website hoặc có thể sử dụng cho mục đích tấn công DoS.


Các phương thức còn lại dưới này thường rất ít dùng, bạn nào muốn tìm hiểu có thể đọc thêm từ các nguồn khác trên mạng nha

2.5 HEAD

Phương thức HEAD yêu cầu một phản hồi tương tự như yêu cầu GET, nhưng nó không phản hồi phần body. Điều này rất hữu ích cho việc lấy thông tin meta trong phần header, mà không cần phải chuyển toàn bộ nội dung.
Dưới đây là ví dụ về Request và Response của phương thức HEAD
+ Request:
HEAD / HTTP/1.1
Host: example.com
+ Response:
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 9 Dec 2016 15:28:38 GMT

2.6 CONNECT

Thiết lập một tunnel tới Server được xác định bởi URI đã cung cấp. Phương thức này có thể cho phép client sử dụng website như một proxy.

2.7 OPTIONS

Phương thức OPTIONS trả lại danh sách các phương thức HTTP mà được bật trên web server. Từ những thông tin này sẽ giúp dễ dàng xác định phương thức nào đang enable.
Dưới đây là ví dụ request và response phương thức OPTIONS
+ Request:
OPTIONS / HTTP/1.1
Host:example.com
+ Response:
HTTP/1.1 200 OK
Allow: OPTIONS, TRACE, GET, HEAD, POST
Server: Microsoft-IIS/7.5
Public: OPTIONS, TRACE, GET, HEAD, POST
X-Powered-By: ASP.NET
Date: Fri, 9 Dec 2016 07:52:17 GMT

Từ những thông tin này sẽ giúp attacker dễ dàng xác định phương thức nào đang enable và từ đó thực hiện tấn công từ xa. Vì vậy, thừa nhận disable phương thức OPTIONS đến người dùng từ xa.


2.8 TRACE

Phương thức TRACE dội lại cho client bất cứ chuỗi nào được gửi tới server, và nó được sử dụng cho mục đích debug.
Dưới đây là ví dụ request và response phương thức TRACE
+ Request:
TRACE / HTTP/1.0
Host: example.com
A: b
+ Response:
HTTP/1.1 200 OK
Date: Fri, 9 Dec 2016 07:55:20 GMT
Server: Microsoft-IIS/7.5
Content-Type: message/http
TRACE / HTTP/1.0
A: b

3. HTTP Status Code

Phần này gồm danh sách các mã trạng thái response HTTP. Các mã trạng thái được nhóm vào các lớp mã tương ứng với nội dung phần nhóm mã đó.
– 1xx – Informational : Chỉ định các mã trạng thái tạm thời
100 Continue, 101 Switching
– 2xx – Successful: Các mã trạng thái trong lớp này chỉ ra các request của client đã thành công, đã nhận, đã hiểu và được chấp nhận.
200 OK, 201 Created, 202 Accepted, 203 Non-Authoritative Information, 204 No Content, 205 Reset Content
– 3xx – Redirection: Các mã trạng thái trong lớp này được sử dụng chuyển hướng URL
300 Multiple Choices, 301 Moved Permanently, 302 Found, 305 Use Proxy, 307 Temporary Redirect
– 4xx – Client Error: Các mã trạng thái trong lớp này thông báo dường như có lỗi từ phía client (như lỗi yêu cầu url, xác thực, không được phép, ..), kèm đó là mô tả lỗi
400 Bad Request, 402 Payment Required, 403 Forbidden, 404 Not Found, 405 Method Not Allowed, 406 Not Acceptable, ..
– 5xx – Server Error: Các mã lỗi trong lớp này chỉ định lỗi xuất phát từ phía server
500 Internal Server Error, 501 Not Implemented, 502 Bad Gateway(Mỗi mùa đăng kí học phần là đây), 503 Service Unavailable, 504 Gateway Timeout(Cũng đăng ký học phần luôn nè), 505 HTTP Version Not Supported

B. Sự khác biệt giữa HTTP và HTTPS


I. HTTPS là gì?


Cấu trúc của HTTPS

Cấu trúc của một HTTPS


HTTPS (HyperText Transfer Protocol Secure) là giao thức HTTP có sử dụng thêm SSL (Secure Sockets Layer) để mã hóa dữ liệu trong lúc truyền tải dữ liệu nhầm gia tăng thêm tính an toàn cho việc truyền dữ liệu giữa Web server và trình duyệt Web. Giao thức Https thì sử dụng cổng 433 để truyền dữ liệu.
Hiện nay thì việc sử dụng giao thức Https chủ yếu được dùng cho các trang web có giao dịch trực tuyến sử dụng thẻ thanh toán đơn hàng. Nhằm đảm bảo an toàn cho giao dịch, tránh những rủi ro bị lấy mất thông tin thể trong quá trình thanh toán.
Ngoài ra web sử dụng giao thức Https là 1 tín hiệu để Google xếp hạng từ khóa. Việc này khiến rất nhiều trang Web chuyển qua dùng giao thức Https để Seo được tốt hơn.

II. HTTPS và HTTP khác nhau ở điểm nào?


Có phải khác nhau ở chữ "S"?

Có phải khác nhau ở chữ “S”?


Hmmm, gần đúng rồi nè, nhưng thiếu!
Tuy việc dùng HTTPS giúp trang Web của bạn bảo mật hơn nhưng sẽ khiến cho việc truy cập của Website chậm hơn so với HTTP. Và nhiều trang không có giao dịch trực tuyến hay truyền tải thông tin dữ liệu quan trọng thì thông tin có bị lộ hay không cũng không quá quan trọng.
Nhưng hiện nay Chrome sắp có cảnh báo với những website còn sử dụng HTTP, và ưu tiên cho các trang web sử dụng HTTPS.
Để có thể sử dụng giao thức HTTPS thì Website của bạn phải có chứng chỉ SSL. Còn không thì sẽ gặp tình trạng hiển thị là kết nối không bảo mật trên trình duyệt Chrome.


KẾT


Okay vậy là chuyên mục WebDevTips tuần này thế là xong rồi, mọi người thắc mắc về nội dung trên thì cứ comment dưới bài viết này nha, mình sẽ cố gắng giải đáp hoặc không được thì nhờ người giải đáp hết cho các bạn :’) 

 

 

Hẹn gặp mọi người trong chuyên mục WebDevTips kì tới. Se ya!

 

Nguồn : vnsys.wordpress.com

Write a Comment

Your email address will not be published. Required fields are marked *