1. An Nguyen

    An Nguyen bụi Ban quản trị

    10/8/17
    #1
    Giao thức HTTP/1.1 cũ được cập nhật lần cuối cùng vào năm 1992, cho đến tận năm 2015, Internet Engineering Task Force (IETF) mới phát hành HTTP/2, là phiên bản thứ 2 của giao thức internet.

    Tiền thân của HTTP/2 là SPDY được Google phát triển

    ƯU ĐIỂM CỦA HTTP/2
    • HTTP/2 là giao thức binary (hệ nhị phân), thay vì văn bản thuần túy
    • HTTP/2 hỗ trợ đa kênh, điều này nghĩa là HTTP/2 có thể gửi nhiều yêu cầu song song với nhau trên 1 kết nối TCP duy nhất. View attachment 391
    • Sử dụng header nén HPACK
    • Cho phép server đẩy các phản hồi vào cache của client thay vị đợi một yêu cầu mới cho mỗi tài nguyên
    • Sử dụng extension ALPN cho phép kết nối được mã hóa nhanh hơn.
    • Giảm bớt thời gian xoay vòng (RTT), giúp website tải nhanh hơn mà không cần phải tối ưu hóa.
    • Domain shardingasset concatenation không còn cần thiết trong HTTP/2. View attachment 392
    • Hỗ trợ đầy đủ bởi các trình duyệt hiện đại
    View attachment 393
    NHƯỢC ĐIỂM CỦA HTTP/2
    • Không thật sự nhanh, và không siêu cải tiến. Do HTTP/2 phải duy trì tương thích ngược với chuẩn cũ HTTP/1.1, nên phải cùng sử dụng các request POST và GET, các mã trạng thái (200, 301, 404, 500)... View attachment 394
    • Mã hóa không bắt buộc đối với HTTP/2. Nhưng các trình duyệt hiện tại chỉ bật HTTP/2 nếu giao thức SSL/TLS được kích hoạt cho website.
    • Vấn đề bảo mật cookie vẫn chưa được khắc phục
     
    Sửa lần cuối: 31/8/17
    Đang tải...
    • ngày tạo

      An Nguyen 10/8/17
    • trả lời cuối

      An Nguyen 10/8/17
    • 1,016

      lượt xem

    • 1

      trả lời

    • 0

      lượt thích

  2. An Nguyen

    An Nguyen bụi Ban quản trị

    10/8/17
    #2
    Hướng dẫn kích hoạt HTTP/2 trong apache trên Ubuntu

    Trước khi tiến hành triển khai HTTP/2, cần thiết lập https cho website của bạn. HTTP/2 có thể được triển khai trên Apache 2.4.17 về sau với module mod_http2
    Bước 1: Cài đặt và kích hoạt module mod_http2

    Thêm repository
    PHP:
    1. sudo add-apt-repository ppa:ondrej/apache2
    Update apache2 từ repository này để có các module mới nhất, nhấn Y nếu trong quá trình cài đặt yêu cầu
    PHP:
    1. sudo apt upgrade apache2
    Kích hoạt HTTP/2 qua module http2
    PHP:
    1. sudo a2enmod http2
    Bước 2: Cài đặt module PHP FastCGI

    Trong Apache, PHP được tích hợp với Apache thông qua module mod_php (đòi hỏi sử dụng mpm prefork, mà không còn hỗ trợ cho Apache 2.4.27 trở lên), vì vậy chúng ta cần sử dụng PHP với FastCGI.

    Chúng ta cần thay đổi mod_php thành php-fpm (PHP FastCGI). Bạn có thể quay trở lại mod_php bất cứ lúc nào nếu website không tương thích.

    Cài đặt PHP FastCGI cho PHP 7.0(dựa trên phiên bản PHP của bạn)
    PHP:
    1. sudo apt install php7.0-fpm
    Enable các module cần thiết là proxy_fcgi và setenvif
    PHP:
    1. sudo a2enmod proxy_fcgi setenvif
    Enable module php7.0-fpm
    PHP:
    1. sudo a2enconf php7.0-fpm
    Disable module mod_php
    PHP:
    1. sudo a2dismod php7.0
    Bước 3: Thay đổi MPM "Prefork" thành "Event"

    Do mod_http2 không tương thích hoàn toàn với MPM Prefork được thiết lập mặc định trong Apache 2.4.27 trỏ lên, do prefork chỉ hỗ trợ 1 process tại một thời điểm trên 1 kết nối. Lựa chọn tốt nhất hiện tại là sử dụng MPM Event (hoặc worker)

    Lưu ý nếu sử dụng MPM Event hoặc Worker, năng suất máy chủ sẽ tăng lên với HTTP/2 hơn so với HTTP/1.1. Điều đó nghĩa là với server có lưu lượng truy cập thấp sẽ không thấy khác biệt nhiều về hiệu suất.

    Trước tiên, disable mpm prefork, do chỉ có 1 mpm được chạy tại một thời điểm
    PHP:
    1. sudo a2dismod mpm_prefork
    Sau đó enable mpm event (hoặc worker)
    PHP:
    1. sudo a2enmod mpm_event
    Bước 4: Thêm chỉ dẫn Protocols trong file virtual host

    Cho phép giao thức HTTP/2 dựa trên TLS và TCP
    Protocols h2 h2c http/1.1

    Hoặc chỉ HTTP/2 trên TLS
    Protocols h2 http/1.1

    Các thông số của chỉ dẫn bao gồm: (theo thứ tự, giao thức đầu tiên được ưu tiên trước)
    • h2: chỉ dẫn Apache hỗ trợ giao thức HTTP/2 dựa trên SSL/TLS
    • h2c: chỉ dẫn Apache hỗ trợ HTTP/2 dựa trên TCP
    • http/1.1: nếu client không chấp nhận HTTP/2 thì yêu cầu sẽ được thực hiện dựa trên HTTP/1.1
    Ví dụ file virtual host sau khi thêm chỉ dẫn. Điều này nghĩa chỉ cho phép giao thức HTTP/1.1 trên các kết nối ngoài trừ kết nối bảo mật tới test.example.org sử dụng HTTP/2.
    PHP:
    1. Protocols http/1.1
    2. <VirtualHost ...>
    3.     ServerName test.example.org
    4.     Protocols h2 http/1.1
    5. </VirtualHost>
    Sau khi thực hiện các bước trên, restart lại Apache
    sudo service apache2 restart

    Bước 3: kiểm tra
    Kiểm tra trên server
    Mã (Text):
    1. curl -k -v --http2 https://example.com/
    Nếu curl thông báo curl: (1) Unsupported protocol , tức phiên bản curl hiện tại không hỗ trợ giao thức http2, cần cài đặt như sau

    Cách đơn giản nhất để kiểm tra xem website có hỗ trợ HTTP/2 không bằng cách sử dụng tool Inspect/ Developer/F12 trong các trình duyệt.

    Trong Chrome, vào phần network, thêm cột Protocol để xem
    pasted-image-0-1.png

    pasted-image-0-2.png

    Xem trong Firefox
    http2-request-header-enabled-apache2.png


    Tham khảo:
    https://http2.pro/doc/Apache
    https://httpd.apache.org/docs/trunk/howto/http2.html
    https://serversforhackers.com/c/curl-with-http2-support
    https://techwombat.com/enable-http2-apache-ubuntu-16-04/
     
    Sửa lần cuối: 22/8/17
Đã lưu nháp Draft deleted
Đang tải...