Cgi thương mại vô hại. Thương mại điện tử - nó là gì? Mạng đối tác thương mại điện tử là chương trình liên kết của các cửa hàng trực tuyến lớn nhất. Cấu hình máy chủ cho CGI

Thương mại điện tử bằng tiếng Nga rõ ràng. Kinh doanh trực tuyến hoạt động như thế nào?

Gần đây ngày càng có nhiều dự án liên quan đến giao dịch trực tuyến. Khi nghiên cứu lĩnh vực này, tôi không thể tìm thấy mô tả chung và dễ hiểu về quy trình. Vì vậy, tôi quyết định tạo một cái gì đó giống như một bảng ghi chú mà bạn luôn có thể tham khảo để hiểu quy trình trong một lĩnh vực như thương mại điện tử.

Tôi sẽ ngay lập tức đặt trước rằng tôi sẽ tập trung vào các quy trình và kênh giúp thu hút khách hàng.

Thương mại điện tử: nó nói về cái gì?

Các định nghĩa từ nhiều nguồn khác nhau nói lên điều gì đó về việc bán hàng hóa hoặc dịch vụ qua Internet. Nói một cách đơn giản, thương mại điện tử là bất kỳ hoạt động trực tuyến nào có tiền xuất hiện.

Mua sắm, bán hàng, bảo hiểm, ngân hàng, tiền điện tử, mọi thứ đều có ở đây. Hãy lấy nó và ký tên.

Từ mục tiêu

Để hiểu được vấn đề, tôi khuyên bạn nên bắt đầu con đường từ đầu. Mục tiêu của bất kỳ doanh nghiệp là gì? Đúng rồi, kiếm tiền. Vì vậy, hãy tưởng tượng bất kỳ sản phẩm nào, chẳng hạn như tất silicon. Tại sao không!

Tôi nghĩ đến điều đầu tiên tôi nghĩ đến, hóa ra có một thứ như thế này...

Nhiệm vụ của chúng tôi là kiếm tiền từ những chiếc tất này. Chúng tôi đang nghĩ về Internet. Hmm...tại sao không xây dựng một trang web và đó là cách doanh số bán hàng sẽ diễn ra, hãy giữ tôi là Maldives! Nhưng nó không đơn giản như vậy.

Tôi thực sự thích vẽ. Điều này giúp hiểu được các quá trình khác nhau. Hãy vẽ?!

Cho đến nay mô hình của chúng tôi trông như thế này. Chúng tôi lấy tất, đưa chúng lên Internet và nhận tiền. Điều này đơn giản là tuyệt vời! Mắt bạn nóng rát, lòng bàn tay đổ mồ hôi và bạn đã muốn bắt tay vào công việc. Nhưng bạn có cần tạo một trang web hoặc một nền tảng bán hàng không?

Trang web hoặc nền tảng để bán

Có nhiều giải pháp khác nhau để đưa sản phẩm của bạn lên World Wide Web. Bạn có thể tạo trang web của riêng mình hoặc sử dụng nền tảng của bên thứ ba (nhóm, trang trên mạng xã hội, bảng tin, v.v.). Hãy dừng lại ở trang web.

Bạn đã đặt hàng một trang web, lấy mẫu có sẵn hoặc tự tạo bằng cách sử dụng trình tạo trang web (bạn có thể google CMS), điều đó không thành vấn đề. Sau đó, họ đặt một loạt tất silicon các loại khác nhau và rất vui.

Xin lỗi đã làm gián đoạn việc đọc. Tham gia kênh telegram của tôi. Những thông báo mới về các bài báo, quá trình phát triển sản phẩm kỹ thuật số và tăng trưởng, tất cả đều có ở đó. Đang chờ bạn! Tiếp tục đi...

Hệ thống thanh toán

Nhưng để một người có thể mua hàng của bạn ngay tại đây và ngay bây giờ, cần phải điều chỉnh hệ thống thanh toán. Đây là một loại dịch vụ cho phép bạn mua hàng trực tuyến thông qua: thẻ ngân hàng, tiền Internet, điện thoại di động và nhiều thứ khác. Để làm được điều này, bạn sẽ phải chia sẻ một tỷ lệ phần trăm trong số các giao dịch, nhưng bằng cách này, bạn sẽ khiến cuộc sống của mình dễ dàng hơn nhiều.

Hãy chọn dịch vụ phù hợp với bạn. Ở đâu đó tỷ lệ phần trăm sẽ cao hơn và ở đâu đó sẽ có đăng ký hoặc thứ gì đó khác. Chỉ cần làm một nghiên cứu nhỏ. Đặt mã được yêu cầu trên trang web của bạn, liên kết tất cả các giao dịch với tài khoản thẻ của bạn và thì đấy!

Đó dường như là tất cả. Có một trang web, thẻ sản phẩm, và thậm chí cả nút “mua” cũng hoạt động, nhưng vẫn thiếu một thứ gì đó… Không có luồng khách hàng nào sẽ mua.

Luồng khách hàng

Trong đó: CAC = Chi phí để có được một khách hàng mới. MCC (chi phí chiến dịch tiếp thị) = Tổng chi phí tiếp thị nhằm thu hút khách hàng (nhưng không giữ chân họ). W (tiền lương) = Tiền lương của nhân viên tiếp thị và quản lý bán hàng. S (phần mềm) = Chi phí phần mềm được sử dụng trong quảng cáo và bán hàng (ví dụ: nền tảng bán hàng được sử dụng, tự động hóa tiếp thị, thử nghiệm A/B, dịch vụ phân tích, v.v.). PS (dịch vụ chuyên nghiệp) = Chi phí dịch vụ chuyên nghiệp cung cấp cho bộ phận tiếp thị và bán hàng (thiết kế, tư vấn, v.v.). O (khác) = Các chi phí chung khác liên quan đến bộ phận tiếp thị và bán hàng. CA (customersacquired) = Tổng số khách hàng thu hút được.

Nhưng chúng ta không được quên chất lượng của khách hàng, LTV sẽ giúp đỡ ở đây.

Số liệu quan trọng: LTV

Giá trị thời gian trực tiếp, vòng đời của khách hàng, là một chỉ số khác trong thương mại điện tử cần được tính đến. Nó cho thấy thu nhập trung bình mà một khách hàng mang lại là bao nhiêu. Có nhiều cách tiếp cận khác nhau để tính toán, tôi đã chọn cách tính toán thực tế dựa trên lợi nhuận, là một trong những cách chính xác nhất.

Đây chỉ đơn giản là tổng doanh thu trong toàn bộ lịch sử mua hàng của từng khách hàng. Cộng tổng tất cả các giao dịch mua (giao dịch) của khách hàng vào giao dịch N, trong đó giao dịch N là giao dịch mua cuối cùng mà khách hàng thực hiện với công ty bạn. Nếu bạn có quyền truy cập vào tất cả dữ liệu giao dịch của khách hàng thì bạn có thể dễ dàng tính toán điều này bằng Excel.

LTV = (giao dịch 1 + giao dịch 2 + giao dịch 3... + giao dịch N) x phần lợi nhuận trong doanh thu.

Tính LTV dựa trên lợi nhuận ròng cuối cùng sẽ cho thấy lợi nhuận thực tế mà khách hàng mang lại cho công ty bạn. Điều này tính đến chi phí dịch vụ khách hàng, chi phí giữ chân, chi phí thu hút, v.v. Kết quả là toàn bộ các phép tính phức tạp dựa trên dữ liệu riêng lẻ. Tổng lợi nhuận được tạo ra trên mỗi khách hàng theo thời gian sẽ giúp bạn hiểu chính xác về lợi nhuận của khách hàng cho đến nay.

Các cách tiếp cận khác có thể được tìm thấy tại.

Các chỉ số quan trọng: Tỷ lệ CAC và LTV

Để hiểu khả năng tồn tại của một doanh nghiệp, điều quan trọng là phải xem xét tỷ lệ của hai tỷ lệ CAC:LTV được đề cập.

  • Ít hơn 1:1 - Bạn đang lao hết tốc lực đến bờ vực phá sản.
  • 1:1 – Bạn mất tiền cho mỗi khách hàng thu hút được.
  • 1:2 – Nghe có vẻ ổn nhưng có vẻ như bạn chưa đầu tư đủ tiền và bạn có thể phát triển nhanh hơn. Triển khai các chiến dịch thu hút khách hàng tích cực hơn và đạt được tỷ lệ gần 1:3.
  • 1:3 – Tỷ lệ lý tưởng. Bạn có một doanh nghiệp phát đạt và một mô hình kinh doanh mạnh mẽ.

Các chỉ số quan trọng: ROI đừng quên

Như chúng ta đã thảo luận ở trên, trong thương mại điện tử, bạn cần hiểu rõ liệu việc sử dụng kênh mua lại có mang lại lợi nhuận hay không. Ngoài LTV và CAC, còn có một chỉ số quan trọng khác: ROI. Nó cho biết liệu khoản đầu tư của bạn, trong trường hợp của chúng ta là vào quảng cáo, có được đền đáp hay không. Đó là. Cuối cùng thì 1 đồng rúp đầu tư đã mang lại cho chúng tôi bao nhiêu.

Một công thức rất đơn giản được sử dụng để tính toán:

Trong đó “Doanh thu chiến dịch” là chênh lệch giữa thu nhập từ kênh và giá thành sản phẩm của bạn. Và để tính lợi nhuận hãy trừ đi chi phí quảng cáo.

Vì vậy, một công thức chi tiết hơn sẽ trông như thế này:

ROI = (Doanh thu kênh – Chi phí) – Chi phí quảng cáo / Chi phí quảng cáo x 100%

Đọc một ví dụ chi tiết hơn với tính toán. Trên thực tế, công thức đơn giản này được đặt trong cùng một bảng Excel, nơi mọi thứ được tính toán tự động.

Cả ba chỉ số mà chúng ta đã thảo luận đều quan trọng trong Thương mại điện tử. Mỗi trong số chúng cho phép bạn tìm ra những điểm nghẽn trong quy trình của mình và xử lý chúng. Tiềm năng phát triển của doanh nghiệp nằm ở đây. Tôi đã thêm một chút nữa vào mô hình của chúng ta với những chiếc tất.

Không thể gói gọn mọi thứ vào một tài liệu, và ai sẽ đọc nó lâu như vậy? Sau này tôi sẽ làm một hướng dẫn riêng về các sắc thái của thương mại điện tử có thể ảnh hưởng đến việc bán hàng.

Tổng cộng

Nhìn chung, bây giờ bạn đã có hiểu biết chung về giao dịch trực tuyến hoặc thương mại điện tử. Hơn nữa, như người ta nói: “Ma quỷ nằm trong các chi tiết”. Nghiên cứu từng kênh riêng biệt, tính toán các chỉ số hiệu suất và tìm kiếm những hiểu biết mới từ những điều nhỏ nhặt. Bán hàng qua Internet cho bạn và hơn thế nữa! Và tôi có thêm một tài liệu nữa.

Vâng, tôi suýt quên, Chúc mừng năm mới các độc giả thân mến! Tôi chúc bạn những chiến thắng và thành tựu lớn trong năm tới!

Andover, Massachusetts, ngày 19 tháng 11 năm 2003

Tập đoàn thương mại, Inc. (NYSE: CGI), nhà cung cấp bảo hiểm ô tô chở khách tư nhân lớn nhất ở Massachusetts và CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), nhà cung cấp hàng đầu về công nghệ thông tin và dịch vụ xử lý kinh doanh, hôm nay đã công bố việc ký kết gia hạn hợp đồng gia công quy trình kinh doanh (BPO) có thời hạn 6 năm trị giá 35 triệu USD. CGI sẽ cung cấp các dịch vụ xử lý chính sách đầy đủ cho các hãng ô tô thương mại và hành khách tư nhân ở Massachusetts cũng như cung cấp công cụ giao diện đại lý CollaborativeEdge của CGI, hỗ trợ và bảo trì ứng dụng, hỗ trợ quy định, tư vấn hệ thống và dịch vụ quản lý tài liệu.

Gerald Fels, phó chủ tịch điều hành và giám đốc tài chính của Tập đoàn Thương mại, cho biết: "Là nhà cung cấp ô tô chở khách tư nhân hàng đầu ở Massachusetts, mục tiêu của chúng tôi là cung cấp cho các đại lý và nhân viên của mình những dịch vụ giúp họ hoạt động ở mức cao nhất. Trong những năm qua, chúng tôi đã nuôi dưỡng mối quan hệ bền chặt với CGI. Hệ thống của họ mạnh mẽ và chính xác và đội ngũ của họ rất quen thuộc với các hệ thống xử lý nội bộ của chúng tôi. Đó là điều quan trọng đối với chúng tôi."

Serge LaPalme, chủ tịch, dịch vụ kinh doanh bảo hiểm của CGI cho biết thêm: "Chúng tôi rất vui mừng được tiếp tục mối quan hệ với Tập đoàn Thương mại, mối quan hệ đã kéo dài hơn 30 năm. Tập đoàn Thương mại tiếp tục là một trong những đối tác kinh doanh có giá trị của chúng tôi và là chiến lược để thành công của chúng tôi. Để giúp khách hàng tập trung hơn nữa vào hoạt động kinh doanh cốt lõi của họ, chúng tôi đang tận dụng các công nghệ mới khi nào và ở đâu nó có ý nghĩa. Đội ngũ của chúng tôi hiểu rõ về ngành bảo hiểm và môi trường pháp lý rất độc đáo của Tiểu bang và kết quả là họ nhanh chóng thực hiện để điều chỉnh các giải pháp hiện có cho lĩnh vực không ngừng phát triển này."

Giới thiệu về Tập đoàn Thương mại, Inc.

The Commerce Group, Inc., một công ty bảo hiểm, có trụ sở chính tại Webster, Massachusetts. Các công ty con bảo hiểm tài sản và tai nạn của Tập đoàn Commerce bao gồm Công ty Bảo hiểm Thương mại và Công ty Bảo hiểm Citation ở Massachusetts, Công ty Bảo hiểm Commerce West ở California và Công ty Bảo hiểm Thương mại Hoa Kỳ ở Ohio. Thông qua các hoạt động bảo hiểm kết hợp của các công ty con, Tập đoàn Commerce được xếp hạng thứ 22 tập đoàn bảo hiểm ô tô cá nhân lớn nhất cả nước của A.M. Tốt nhất, dựa trên thông tin phí bảo hiểm trực tiếp bằng văn bản năm 2002.

Giới thiệu về CGI
Được thành lập vào năm 1976, CGI là công ty dịch vụ công nghệ thông tin độc lập lớn thứ năm ở Bắc Mỹ, dựa trên số lượng nhân viên. CGI và các công ty liên kết của nó tuyển dụng 20.000 chuyên gia. Tỷ lệ doanh thu hàng năm của CGI hiện là 2,8 tỷ đô la CDN (1,9 tỷ đô la Mỹ) và vào ngày 30 tháng 9 năm 2003, đơn hàng tồn đọng của CGI là 12,3 tỷ đô la CDN (9,1 tỷ đô la Mỹ). CGI cung cấp các dịch vụ quy trình kinh doanh và CNTT toàn diện cho khách hàng trên toàn thế giới từ các văn phòng ở Canada, Hoa Kỳ và Châu Âu. Cổ phiếu của CGI được niêm yết trên TSX (GIB.A) và NYSE (GIB) và được đưa vào Chỉ số tổng hợp TSX 100 cũng như Chỉ số Công nghệ thông tin Canada S&P/TSX và Chỉ số MidCap Canada.

Chủ các cửa hàng trực tuyến đã quen thuộc với khái niệm “thương mại điện tử” và họ đã biết câu trả lời cho câu hỏi “thương mại điện tử - nó là gì?” Nhưng nếu bạn đi sâu vào vấn đề, nhiều sắc thái sẽ xuất hiện và thuật ngữ này mang ý nghĩa rộng hơn.

Thương mại điện tử: nó là gì?

Khái niệm chung như sau: thương mại điện tử được hiểu là một cách tiếp cận nhất định trong hoạt động kinh doanh, trong đó bao gồm việc đưa một số hoạt động sử dụng truyền dữ liệu số vào việc cung cấp hàng hóa hoặc cung cấp dịch vụ/công việc, bao gồm cả việc sử dụng Internet.

Vì vậy, đó là bất kỳ giao dịch thương mại nào được thực hiện bằng phương tiện liên lạc điện tử.

Sơ đồ công việc được sắp xếp như sau:

  • bất kỳ ai cũng có thể là một blogger hoặc bất kỳ chủ sở hữu nào khác của trang Internet của riêng họ) đăng ký trong hệ thống này;
  • có được liên kết riêng của nó;
  • đặt một mã đặc biệt trên trang web của mình - một quảng cáo dành cho đối tác chính thức đã chọn của Mạng đối tác thương mại điện tử sẽ xuất hiện;
  • giám sát chuyển đổi trang web;
  • kiếm được một tỷ lệ phần trăm nhất định cho mỗi lần mua hàng của khách truy cập vào trang web của bạn theo liên kết liên kết.

Thương mại điện tử WP

Một số lượng lớn người hiện nay đam mê thương mại điện tử, chủ yếu là do mong muốn tạo ra trang web của riêng mình, một cửa hàng trực tuyến độc đáo để bán sản phẩm của riêng mình. Để đáp ứng nhu cầu ngày càng tăng này, các nhà phát triển đã tập trung vào việc tạo các mẫu thương mại điện tử. Hãy xem điều gì sẽ xảy ra tiếp theo.

Một ví dụ về mẫu như vậy là thương mại điện tử WordPress. Nó là một plugin giỏ hàng dành cho WordPress (một trong những hệ thống quản lý tài nguyên web nổi tiếng nhất), chủ yếu nhằm mục đích tạo và tổ chức blog). Nó được cung cấp hoàn toàn miễn phí và cho phép khách truy cập trang web mua hàng trên trang web.

Nói cách khác, plugin này cho phép bạn tạo một cửa hàng trực tuyến (dựa trên WordPress). Plugin thương mại điện tử này có tất cả các công cụ, cài đặt và tùy chọn cần thiết để phù hợp với nhu cầu hiện đại.

2012: Mua Logica của Anh

Vào tháng 6 năm 2012, Tập đoàn CGI thông báo rằng họ đã ký thỏa thuận mua nhà tích hợp hệ thống lớn nhất châu Âu Logica. Số tiền giao dịch là 2,8 tỷ đô la Canada (2,7 tỷ USD). Là một phần của thỏa thuận đã đạt được, CGI cũng đồng ý đảm nhận nghĩa vụ trả khoản nợ của Logica với số tiền 515 triệu đô la Canada.

Để tài trợ cho giao dịch, CGI có kế hoạch huy động 1 tỷ đô la Canada bằng cách phát hành thêm 46,7 triệu cổ phiếu, vay 2 tỷ đô la Canada từ Ngân hàng Thương mại Hoàng gia Canada, Ngân hàng Quốc gia Canada và Ngân hàng Toronto-Dominion, và khoảng 650 triệu đô la Canada. thêm đô la. đô la - trong hạn mức tín dụng hiện tại.

Giá đề xuất trên mỗi cổ phiếu cao hơn 59,8% so với giá đóng cửa của Logica vào ngày 30 tháng 5 năm 2012. Thương vụ này cao gấp khoảng 6,6 lần thu nhập của Logica trước lãi vay, thuế, khấu hao và khấu hao (EBITDA) trong năm.

Việc mua lại Logica dự kiến ​​sẽ tăng thu nhập trên mỗi cổ phiếu của CGI từ 25% đến 30%, không bao gồm chi phí mua lại và tích hợp. Kết quả của việc sáp nhập là lực lượng lao động và doanh thu hàng năm của công ty sẽ cao hơn gấp đôi so với CGI. Quy mô nhân viên của công ty kết hợp sẽ vào khoảng 72 nghìn nhân viên có văn phòng ở 43 quốc gia và doanh thu hàng năm sẽ vào khoảng 10,4 tỷ đô la Canada (9,6 tỷ USD).

Công ty mới sẽ là công ty tư vấn CNTT lớn thứ sáu trên thế giới. Theo ước tính của Reuters, lớn nhất trong số này là IBM, Accenture, Cap Gemini, Tata Consultancy và Infosys.

Chủ tịch kiêm Giám đốc điều hành CGI Michael Roach cho biết: "Logica là công ty dịch vụ công nghệ và kinh doanh hàng đầu với các chuyên gia tận tâm và những khách hàng lâu năm, đáng tin cậy. Chúng tôi tin rằng mình đang làm điều đúng đắn". với mức giá phù hợp và vào đúng thời điểm để tạo ra một trong số ít nhà cung cấp dịch vụ công nghệ đầu cuối độc lập lớn nhất."

Ban giám đốc của CGI đã nhất trí thông qua giao dịch. Dự kiến ​​sẽ hoàn thành vào tháng 9 năm 2012, sau khi nhận được sự chấp thuận của cổ đông và tuân theo các thủ tục tiêu chuẩn. Quá trình sáp nhập công ty dự kiến ​​sẽ hoàn thành trong vòng 3 năm

Nhờ có World Wide Web, hầu hết mọi người đều có thể cung cấp thông tin trực tuyến dưới hình thức dễ nhìn và có thể phổ biến rộng rãi. Bạn chắc chắn đã lướt Internet và xem các trang web khác, và bây giờ bạn có thể biết rằng những từ viết tắt đáng sợ như "HTTP" và "HTML" chỉ đơn giản là cách viết tắt của "Web" và "cách thể hiện thông tin trên Internet". Bạn có thể đã có một số kinh nghiệm trình bày thông tin trên Internet.

Internet đã được chứng minh là một phương tiện lý tưởng để phân phối thông tin, có thể thấy từ sự phổ biến rộng rãi và sự phát triển rộng rãi của nó. Mặc dù một số người đặt câu hỏi về tính hữu ích của Internet và cho rằng sự phát triển và phổ biến rộng rãi của nó chủ yếu là do quảng cáo xâm nhập, nhưng không thể phủ nhận Internet là một phương tiện quan trọng để trình bày mọi loại thông tin. Không chỉ có sẵn nhiều dịch vụ để cung cấp thông tin cập nhật (tin tức, thời tiết, sự kiện thể thao trực tiếp) và tài liệu tham khảo bằng điện tử, mà còn có sẵn một lượng đáng kể các loại dữ liệu khác. IRS, cơ quan phân phối tất cả các biểu mẫu khai thuế năm 1995 và các thông tin khác qua World Wide Web, gần đây thừa nhận đã nhận được thư của người hâm mộ cho trang Web của mình. Ai có thể nghĩ rằng IRS sẽ nhận được thư của người hâm mộ? Điều này không phải vì trang web của anh ấy được thiết kế tốt mà vì nó đã được chứng minh là một công cụ thực sự hữu ích cho hàng nghìn, có lẽ là hàng triệu người.

Điều gì khiến Web trở nên độc đáo và trở thành một dịch vụ thông tin hấp dẫn như vậy? Trước hết, nó cung cấp giao diện hypermedia cho dữ liệu. Hãy suy nghĩ về ổ cứng máy tính của bạn. Thông thường, dữ liệu được thể hiện theo kiểu tuyến tính, tương tự như hệ thống tệp. Ví dụ: bạn có một số thư mục và bên trong mỗi thư mục có tài liệu hoặc các thư mục khác. Web sử dụng một mô hình khác để thể hiện thông tin được gọi là siêu phương tiện. Giao diện siêu văn bản bao gồm một tài liệu và các liên kết. Liên kết là những từ được nhấp vào để xem các tài liệu khác hoặc tìm các loại thông tin khác. Web mở rộng khái niệm siêu văn bản để bao gồm các loại phương tiện khác, chẳng hạn như đồ họa, âm thanh, video (do đó có tên là "hypermedia"). Việc chọn văn bản hoặc đồ họa trên tài liệu cho phép bạn xem thông tin liên quan về mục đã chọn ở bất kỳ dạng nào.

Hầu hết mọi người đều có thể hưởng lợi từ cách trình bày và phân phối thông tin đơn giản và độc đáo này, từ các học giả muốn sử dụng dữ liệu ngay lập tức với đồng nghiệp của họ cho đến những doanh nhân chia sẻ thông tin về công ty của họ với mọi người. Tuy nhiên, mặc dù việc cung cấp thông tin là vô cùng quan trọng nhưng trong vài năm trở lại đây nhiều người cảm thấy rằng việc tiếp nhận thông tin cũng là một quá trình quan trọng không kém.

Mặc dù Web cung cấp một giao diện siêu phương tiện duy nhất cho thông tin nhưng vẫn có nhiều cách hiệu quả khác để phân phối dữ liệu. Ví dụ: các dịch vụ mạng như Giao thức truyền tệp (FTP) và nhóm tin Gopher đã tồn tại từ rất lâu trước World Wide Web. Thư điện tử đã là phương tiện chính để liên lạc và trao đổi thông tin trên Internet và hầu hết các mạng khác ngay từ những ngày đầu của các mạng này. Tại sao Internet lại trở thành một cách phổ biến để phân phối thông tin? Khía cạnh đa phương tiện của Internet đã đóng góp đáng kể vào thành công chưa từng có của nó, nhưng để Internet đạt hiệu quả cao nhất thì nó phải có tính tương tác.

Nếu không có khả năng nhận thông tin đầu vào của người dùng và cung cấp thông tin, Web sẽ là một môi trường hoàn toàn tĩnh. Thông tin sẽ chỉ có sẵn ở định dạng do tác giả chỉ định. Điều này sẽ làm suy yếu một trong những khả năng của máy tính nói chung: thông tin tương tác. Ví dụ: thay vì buộc người dùng xem nhiều tài liệu như thể họ đang xem qua một cuốn sách hoặc từ điển, sẽ tốt hơn nếu cho phép người dùng xác định các từ khóa về một chủ đề quan tâm. Người dùng có thể tùy chỉnh cách trình bày dữ liệu thay vì dựa vào cấu trúc cứng nhắc do nhà cung cấp nội dung xác định.

Thuật ngữ "Máy chủ web" có thể gây hiểu nhầm vì nó có thể ám chỉ cả máy vật lý và phần mềm mà nó sử dụng để giao tiếp với các trình duyệt Internet. Khi một trình duyệt yêu cầu một địa chỉ Web nhất định, trước tiên nó sẽ kết nối với máy qua Internet, gửi phần mềm máy chủ Web yêu cầu tài liệu. Phần mềm này chạy liên tục, chờ đợi những yêu cầu như vậy đến và phản hồi tương ứng.

Mặc dù máy chủ có thể gửi và nhận dữ liệu nhưng bản thân máy chủ có chức năng hạn chế. Ví dụ: máy chủ nguyên thủy nhất chỉ có thể gửi tệp được yêu cầu tới trình duyệt. Máy chủ thường không biết phải làm gì với đầu vào bổ sung này hoặc đầu vào bổ sung đó. Nếu ISP không cho máy chủ biết cách xử lý thông tin bổ sung này thì rất có thể máy chủ sẽ bỏ qua thông tin đầu vào.

Để máy chủ có thể thực hiện được các hoạt động khác ngoài việc tìm kiếm và gửi file lên trình duyệt Internet, bạn cần biết cách mở rộng chức năng của máy chủ. Ví dụ: máy chủ Web không thể tìm kiếm cơ sở dữ liệu dựa trên từ khóa do người dùng nhập và trả về nhiều tài liệu phù hợp trừ khi khả năng đó đã được lập trình vào máy chủ theo cách nào đó.

CGI là gì?

Giao diện cổng chung (CGI) là giao diện cho máy chủ cho phép bạn mở rộng chức năng của máy chủ. Sử dụng CGI, bạn có thể tương tác tương tác với người dùng truy cập trang web của bạn. Ở cấp độ lý thuyết, CGI cho phép máy chủ có thể phân tích (diễn giải) đầu vào từ trình duyệt và trả về thông tin dựa trên đầu vào của người dùng. Ở mức độ thực tế, CGI là một giao diện cho phép lập trình viên viết các chương trình giao tiếp dễ dàng với máy chủ.

Thông thường, để mở rộng khả năng của máy chủ, bạn sẽ phải tự sửa đổi máy chủ. Giải pháp này không được mong muốn vì nó đòi hỏi phải hiểu lớp thấp hơn của lập trình mạng Giao thức Internet. Điều này cũng yêu cầu chỉnh sửa và biên dịch lại mã nguồn máy chủ hoặc viết máy chủ tùy chỉnh cho từng tác vụ. Giả sử bạn muốn mở rộng khả năng của máy chủ để nó hoạt động như một cổng Web-to-e-mail, lấy thông tin người dùng nhập từ trình duyệt và gửi email cho người dùng khác. Máy chủ sẽ phải chèn mã để phân tích cú pháp đầu vào từ trình duyệt, chuyển tiếp nó qua email cho người dùng khác và chuyển tiếp phản hồi trở lại trình duyệt qua kết nối mạng.

Thứ nhất, một tác vụ như vậy yêu cầu quyền truy cập vào mã máy chủ, điều này không phải lúc nào cũng thực hiện được.

Thứ hai, nó khó và đòi hỏi kiến ​​thức kỹ thuật sâu rộng.

Thứ ba, điều này chỉ áp dụng cho một máy chủ cụ thể. Nếu cần di chuyển máy chủ của mình sang nền tảng khác, bạn sẽ phải chạy hoặc ít nhất là tốn nhiều thời gian để chuyển mã sang nền tảng đó.

Tại sao lại là CGI?

CGI cung cấp một giải pháp di động và đơn giản cho những vấn đề này. Giao thức CGI xác định một cách tiêu chuẩn để các chương trình giao tiếp với máy chủ Web. Không cần bất kỳ kiến ​​thức đặc biệt nào, bạn có thể viết chương trình bằng bất kỳ ngôn ngữ máy nào có giao diện và giao tiếp với máy chủ Web. Chương trình này sẽ hoạt động với tất cả các máy chủ Web hiểu giao thức CGI.

Giao tiếp CGI được thực hiện bằng cách sử dụng đầu vào và đầu ra tiêu chuẩn, điều đó có nghĩa là nếu bạn biết cách in và đọc dữ liệu bằng ngôn ngữ lập trình của mình, bạn có thể viết một ứng dụng máy chủ Web. Ngoài việc phân tích đầu vào và đầu ra, lập trình ứng dụng CGI gần như tương đương với lập trình bất kỳ ứng dụng nào khác. Ví dụ: để lập trình chương trình "Xin chào, Thế giới!", bạn sử dụng chức năng in của ngôn ngữ và định dạng được xác định cho chương trình CGI để in thông báo tương ứng.

Lựa chọn ngôn ngữ lập trình

Vì CGI là một giao diện phổ quát nên bạn không bị giới hạn ở bất kỳ ngôn ngữ máy cụ thể nào. Một câu hỏi quan trọng thường được đặt ra là: lập trình CGI có thể sử dụng ngôn ngữ lập trình nào? Bạn có thể sử dụng bất kỳ ngôn ngữ nào cho phép bạn thực hiện những việc sau:

  • In ra đầu ra tiêu chuẩn
  • Đọc từ đầu vào tiêu chuẩn
  • Đọc từ các chế độ thay đổi

Hầu như tất cả các ngôn ngữ lập trình và nhiều ngôn ngữ kịch bản đều thực hiện ba việc này và bạn có thể sử dụng bất kỳ ngôn ngữ nào trong số đó.

Ngôn ngữ thuộc một trong hai loại sau: dịch và thông dịch. Ngôn ngữ được dịch như C hoặc C++ thường nhỏ hơn và nhanh hơn, trong khi các ngôn ngữ được dịch như Perl hoặc Rexx đôi khi yêu cầu tải một trình thông dịch lớn khi khởi động. Ngoài ra, bạn có thể phân phối mã nhị phân (mã dịch sang ngôn ngữ máy) mà không cần mã nguồn nếu ngôn ngữ của bạn có thể dịch được. Phân phối các tập lệnh có thể hiểu được thường có nghĩa là phân phối mã nguồn.

Trước khi chọn ngôn ngữ, trước tiên bạn cần xem xét các ưu tiên của mình. Bạn cần cân nhắc lợi ích của tốc độ và hiệu quả của một ngôn ngữ lập trình so với sự dễ dàng khi lập trình của ngôn ngữ khác. Nếu bạn mong muốn học một ngôn ngữ khác, thay vì sử dụng ngôn ngữ bạn đã biết, hãy cân nhắc cẩn thận những ưu điểm và nhược điểm của cả hai ngôn ngữ.

Hai ngôn ngữ được sử dụng phổ biến nhất để lập trình CGI là C và Perl (cả hai đều được đề cập trong cuốn sách này). Cả hai đều có ưu và nhược điểm rõ ràng. Perl là một ngôn ngữ cấp cao, đồng thời là ngôn ngữ mạnh mẽ, đặc biệt thích hợp để phân tích văn bản. Mặc dù tính dễ sử dụng, tính linh hoạt và sức mạnh khiến nó trở thành ngôn ngữ hấp dẫn cho lập trình CGI, nhưng kích thước tương đối lớn và hoạt động chậm hơn đôi khi khiến nó không phù hợp với một số ứng dụng. Các chương trình C nhỏ hơn, hiệu quả hơn và cung cấp khả năng kiểm soát hệ thống ở cấp độ thấp hơn, nhưng lập trình phức tạp hơn, không có các quy trình xử lý văn bản tích hợp nhẹ và khó gỡ lỗi hơn.

Ngôn ngữ nào phù hợp nhất cho lập trình CGI? Cái mà bạn cho là thuận tiện hơn từ quan điểm lập trình. Cả hai đều có hiệu quả như nhau trong việc lập trình các ứng dụng CGI và với các thư viện thích hợp, cả hai đều có khả năng tương tự nhau. Tuy nhiên, nếu bạn có một máy chủ khó tiếp cận, bạn có thể sử dụng các chương trình C được dịch nhỏ hơn. Nếu bạn cần viết nhanh một ứng dụng đòi hỏi nhiều công việc xử lý văn bản, bạn có thể sử dụng Perl thay thế.

Cảnh báo

Có một số lựa chọn thay thế quan trọng cho các ứng dụng CGI. Nhiều máy chủ hiện nay bao gồm lập trình API, giúp lập trình các tiện ích mở rộng máy chủ trực tiếp dễ dàng hơn so với các ứng dụng CGI độc lập. Máy chủ API thường hiệu quả hơn các chương trình CGI. Các máy chủ khác bao gồm chức năng tích hợp sẵn có thể xử lý các phần tử đặc biệt không phải CGI, chẳng hạn như liên kết cơ sở dữ liệu. Cuối cùng, một số ứng dụng có thể được xử lý bằng một số công nghệ mới phía máy khách (chứ không phải phía máy chủ) như Java. Với những thay đổi nhanh chóng như vậy của công nghệ, liệu CGI có nhanh chóng trở nên lỗi thời?

Khắc nghiệt. CGI có một số lợi thế so với các công nghệ mới hơn.

  • Nó rất linh hoạt và di động. Bạn có thể viết một ứng dụng CGI bằng hầu hết mọi ngôn ngữ lập trình trên mọi nền tảng. Một số lựa chọn thay thế, chẳng hạn như API máy chủ, giới hạn bạn ở một số ngôn ngữ nhất định và khó học hơn nhiều.
  • Không có khả năng các công nghệ phía máy khách như Java sẽ thay thế CGI, bởi vì có một số ứng dụng mà các ứng dụng phía máy chủ phù hợp hơn nhiều để chạy.
  • Nhiều hạn chế của CGI là những hạn chế của HTML hoặc HTTP. Khi các tiêu chuẩn Internet nói chung phát triển thì khả năng CGI cũng vậy.

Bản tóm tắt

Giao diện cổng chung là giao thức mà các chương trình tương tác với máy chủ Web. Tính linh hoạt của CGI mang lại cho các lập trình viên khả năng viết các chương trình cổng bằng hầu hết mọi ngôn ngữ, mặc dù có nhiều sự đánh đổi liên quan đến các ngôn ngữ khác nhau. Nếu không có khả năng này, việc tạo các trang Web tương tác sẽ khó khăn, tốt nhất là yêu cầu sửa đổi máy chủ và tính tương tác sẽ không khả dụng đối với hầu hết người dùng không phải là quản trị viên trang.

Chương 2: Cơ bản

Vài năm trước, tôi đã tạo một trang cho một trường đại học ở Harvard nơi mọi người có thể gửi nhận xét về họ. Vào thời điểm đó, Internet còn non trẻ và tài liệu còn khan hiếm. Tôi cũng như nhiều người khác, dựa vào tài liệu ngắn và hệ thống lập trình do người khác tạo ra để tự học lập trình CGI. Mặc dù phương pháp nghiên cứu này đòi hỏi phải tìm kiếm, thử nghiệm nhiều và đặt ra nhiều câu hỏi nhưng nó rất hiệu quả. Chương này là kết quả của công việc đầu tiên của tôi với CGI (tất nhiên là có một vài điều chỉnh).

Mặc dù phải mất một thời gian để hiểu đầy đủ và thành thạo giao diện cổng chung nhưng bản thân giao thức này khá đơn giản. Bất kỳ ai có một số kỹ năng lập trình cơ bản và quen thuộc với Web đều có thể nhanh chóng học cách lập trình các ứng dụng CGI khá phức tạp giống như tôi và những người khác đã học cách đây vài năm.

Mục đích của chương này là trình bày những điều cơ bản về CGI một cách toàn diện nhưng cô đọng. Mỗi khái niệm được thảo luận ở đây sẽ được trình bày chi tiết trong các chương tiếp theo. Tuy nhiên, sau khi hoàn thành chương này, bạn có thể bắt đầu lập trình các ứng dụng CGI ngay lập tức. Khi đạt đến cấp độ này, bạn có thể tìm hiểu sự phức tạp của CGI bằng cách đọc phần còn lại của cuốn sách này hoặc đơn giản là tự mình thử nghiệm.

Bạn có thể tóm gọn việc lập trình CGI thành hai nhiệm vụ: nhận thông tin từ trình duyệt Web và gửi thông tin trở lại trình duyệt. Việc này được thực hiện khá trực quan khi bạn đã quen với việc sử dụng các ứng dụng CGI thông thường. Thông thường người dùng được yêu cầu điền vào một số biểu mẫu, chẳng hạn như điền tên của mình. Khi người dùng điền vào biểu mẫu và nhấn Enter, thông tin này sẽ được gửi đến chương trình CGI. Sau đó, chương trình CGI phải chuyển đổi thông tin này thành thông tin mà nó hiểu được, xử lý thông tin đó và gửi lại cho trình duyệt, có thể là một xác nhận đơn giản hoặc kết quả tìm kiếm trong cơ sở dữ liệu đa mục đích.

Nói cách khác, lập trình CGI đòi hỏi phải hiểu cách nhận đầu vào từ trình duyệt Internet và cách gửi đầu ra trở lại. Điều gì xảy ra giữa giai đoạn đầu vào và đầu ra của chương trình CGI phụ thuộc vào mục tiêu của nhà phát triển. Bạn sẽ thấy rằng khó khăn chính trong lập trình CGI nằm ở giai đoạn trung gian này; Khi bạn học cách làm việc với đầu vào và đầu ra, điều đó về cơ bản là đủ để trở thành nhà phát triển CGI.

Trong chương này, bạn sẽ tìm hiểu các nguyên tắc đằng sau đầu vào và đầu ra CGI, cũng như các kỹ năng cơ bản khác mà bạn cần để viết và sử dụng CGI, bao gồm những việc như tạo biểu mẫu HTML và đặt tên cho các chương trình CGI của bạn. Chương này bao gồm các chủ đề sau:

  • Chương trình truyền thống “Xin chào thế giới!”;
  • Đầu ra CGI: Gửi thông tin trở lại để hiển thị trên trình duyệt Internet;
  • Cấu hình, cài đặt và chạy ứng dụng. Bạn sẽ tìm hiểu về các nền tảng và máy chủ Web khác nhau;
  • Đầu vào CGI: Giải thích thông tin được gửi bởi trình duyệt Web. Giới thiệu một số thư viện lập trình hữu ích để phân tích cú pháp đầu vào đó;
  • Một ví dụ đơn giản: nó bao gồm tất cả các bài học trong một chương nhất định;
  • Chiến lược lập trình.

Do tính chất của chương này nên tôi chỉ đề cập sơ qua một số chủ đề. Đừng lo lắng; Tất cả những chủ đề này sẽ được đề cập sâu hơn trong các chương khác.

Chào thế giới!

Bạn bắt đầu với một bài toán lập trình giới thiệu truyền thống. Bạn sẽ viết một chương trình hiển thị "Xin chào, Thế giới!" trên trình duyệt Web của bạn. Trước khi viết chương trình này, bạn phải hiểu thông tin mà trình duyệt Web mong đợi nhận được từ các chương trình CGI. Bạn cũng cần biết cách chạy chương trình này để có thể thấy nó hoạt động.

CGI độc lập với ngôn ngữ nên bạn có thể triển khai chương trình này bằng bất kỳ ngôn ngữ nào. Một số ngôn ngữ khác nhau được sử dụng ở đây để thể hiện tính độc lập của từng ngôn ngữ. Trong Perl, chương trình "Xin chào thế giới!" được hiển thị trong Liệt kê 2.1.

Liệt kê 2.1. Chào thế giới! trong Perl. #!/usr/local/bin/Perl # Hello.cgi - Chương trình CGI đầu tiên của tôi in "Content-Type: text/html\n\n"; in " \n"; in " Chào thế giới!"; in "\n"; in " \n"; in "

Chào thế giới!

\n"; in " \N";

Lưu chương trình này dưới dạng hello.cgi và cài đặt nó ở vị trí thích hợp. (Nếu bạn không chắc chắn nó ở đâu, đừng lo lắng; bạn sẽ tìm thấy trong phần "Cài đặt và chạy chương trình CGI" ở phần sau của chương này.) Đối với hầu hết các máy chủ, thư mục bạn cần là cgi-bin . Bây giờ, hãy gọi chương trình từ trình duyệt Web của bạn. Đối với hầu hết, điều này có nghĩa là mở bộ định vị tài nguyên thống nhất (URL) sau:

http://tên máy chủ/tên thư mục/hello.cgi

Tên máy chủ là tên máy chủ Web của bạn và tên thư mục là thư mục nơi bạn đặt hello.cgi (có thể là cgi-bin).

Tách hello.cgi

Có một số điều cần lưu ý về hello.cgi.

Đầu tiên, bạn sử dụng các lệnh in đơn giản. Các chương trình CGI không yêu cầu bất kỳ bộ mô tả tệp hoặc bộ mô tả đầu ra đặc biệt nào. Để gửi đầu ra tới trình duyệt, chỉ cần in ra thiết bị xuất chuẩn.

Thứ hai, lưu ý rằng nội dung của câu lệnh in đầu tiên (Content-Type: text/html) không xuất hiện trên trình duyệt Web của bạn. Bạn có thể gửi lại bất kỳ thông tin nào bạn muốn cho trình duyệt (trang HTML, đồ họa hoặc âm thanh), nhưng trước tiên, bạn cần cho trình duyệt biết bạn đang gửi loại dữ liệu nào. Dòng này cho trình duyệt biết loại thông tin mong đợi - trong trường hợp này là trang HTML.

Thứ ba, chương trình có tên hello.cgi. Không phải lúc nào bạn cũng cần sử dụng phần mở rộng .cgi với tên chương trình CGI của mình. Mặc dù mã nguồn của nhiều ngôn ngữ cũng sử dụng phần mở rộng .cgi nhưng nó không được dùng để chỉ loại ngôn ngữ mà là cách để máy chủ xác định tệp là tệp thực thi chứ không phải tệp đồ họa, tệp HTML hoặc tập tin văn bản. Máy chủ thường được cấu hình để chỉ cố gắng thực thi những tệp có phần mở rộng này, hiển thị nội dung của tất cả những tệp khác. Mặc dù việc sử dụng phần mở rộng .cgi là không bắt buộc nhưng đây vẫn được coi là cách làm tốt.

Nhìn chung, hello.cgi bao gồm hai phần chính:

  • cho trình duyệt biết thông tin nào sẽ xảy ra (Loại nội dung: văn bản/html)
  • cho trình duyệt biết những gì sẽ hiển thị (Xin chào, Thế giới!)

Chào thế giới! ở C

Để thể hiện tính độc lập về ngôn ngữ của các chương trình CGI, Liệt kê 2.2 hiển thị tương đương với chương trình hello.cgi được viết bằng C.

Liệt kê 2.2. Chào thế giới! trong C. /* hello.cgi.c - Xin chào, CGI thế giới */ #include int main() ( printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" Chào thế giới!\n"); printf("\n"); printf(" \n"); printf("

Chào thế giới!

\n"); printf(" \N"); )

Ghi chú

Lưu ý rằng phiên bản Perl của hello.cgi sử dụng Content-Type print ": text/html\n\n "; Trong khi phiên bản C sử dụng Printf("Content-Type: text/html\r\n\r\n");

Tại sao Perl in toán tử kết thúc bằng hai dòng mới (\n) trong khi C printf kết thúc bằng hai dòng xuống dòng và dòng mới (\r\n)?

Về mặt kỹ thuật, các tiêu đề (tất cả đầu ra trước dòng trống) dự kiến ​​sẽ được phân tách bằng dấu xuống dòng và dòng mới. Thật không may, trên các máy DOS và Windows, Perl dịch \r là một dòng mới khác chứ không phải là một dòng trả về đầu dòng.

Mặc dù ngoại lệ \rs của Perl không chính xác về mặt kỹ thuật, nhưng nó sẽ hoạt động trên hầu hết các giao thức và có khả năng di động như nhau trên tất cả các nền tảng. Do đó, trong tất cả các ví dụ Perl trong cuốn sách này, tôi sử dụng các tiêu đề phân tách dòng mới thay vì xuống dòng và dòng mới.

Một giải pháp thích hợp cho vấn đề này được trình bày ở Chương 4, Kết luận.

Cả máy chủ Web và trình duyệt đều không quan tâm ngôn ngữ nào được sử dụng để viết chương trình. Mặc dù mỗi ngôn ngữ đều có những ưu điểm và nhược điểm khi là ngôn ngữ lập trình CGI, nhưng tốt nhất bạn nên sử dụng ngôn ngữ mà bạn cảm thấy thoải mái nhất khi làm việc. (Việc lựa chọn ngôn ngữ lập trình được thảo luận chi tiết hơn trong Chương 1, “Giao diện cổng chung (CGI)”).

Kết xuất CGI

Bây giờ bạn có thể xem xét kỹ hơn vấn đề gửi thông tin tới trình duyệt Web. Từ ví dụ "Xin chào thế giới!", bạn có thể thấy rằng các trình duyệt Web mong đợi hai bộ dữ liệu: một tiêu đề chứa thông tin như thông tin nào sẽ hiển thị (ví dụ: Loại nội dung: dòng) và thông tin thực tế (trình duyệt Web là gì). hiển thị). Hai thông tin này cách nhau bằng một dòng trống.

Tiêu đề được gọi là tiêu đề HTTP. Nó cung cấp thông tin quan trọng về thông tin mà trình duyệt sẽ nhận được. Có một số loại tiêu đề HTTP khác nhau và loại phổ biến nhất là loại bạn đã sử dụng trước đây: Content-Type: header. Bạn có thể sử dụng các kết hợp tiêu đề HTTP khác nhau, được phân tách bằng dấu xuống dòng và dòng mới (\r\n). Dòng trống ngăn cách tiêu đề với dữ liệu cũng bao gồm dấu xuống dòng và dòng mới (lý do tại sao cần cả hai đều được thảo luận ngắn gọn trong ghi chú trước và được trình bày chi tiết trong Chương 4). Bạn sẽ tìm hiểu về các tiêu đề HTTP khác trong Chương 4; Hiện tại bạn đang xử lý tiêu đề Content-Type:.

Content-Type: Tiêu đề mô tả loại dữ liệu mà CGI trả về. Định dạng thích hợp cho tiêu đề này là:

Loại nội dung: loại phụ/loại

Trong đó loại/loại phụ là loại Tiện ích mở rộng thư Internet đa năng (MIME) chính xác. Loại MIME phổ biến nhất là loại HTML: text/html. Bảng 2.1 liệt kê một số loại MIME phổ biến hơn sẽ được thảo luận; Danh sách và phân tích đầy đủ hơn về các loại MIME được cung cấp trong Chương 4.

Ghi chú

MIME ban đầu được phát minh để mô tả nội dung của nội dung thư. Nó đã trở thành một cách khá phổ biến để thể hiện thông tin Loại Nội dung. Bạn có thể đọc thêm về MIME trong RFC1521. RFC trên Internet là viết tắt của Yêu cầu Nhận xét, là bản tóm tắt các quyết định được đưa ra bởi các nhóm trên Internet đang cố gắng thiết lập các tiêu chuẩn. Bạn có thể xem kết quả của RFC1521 tại địa chỉ sau: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Bảng 2.1. Một số loại MIME phổ biến Loại MIME Mô tả Văn bản/html Ngôn ngữ đánh dấu siêu văn bản (HTML) Văn bản/thuần túy Tệp văn bản thuần túy Hình ảnh/gif Tệp đồ họa Hình ảnh GIF/jpeg Tệp đồ họa nén Tệp âm thanh/âm thanh cơ bản JPEG Tệp Sun *.au Audio/x-wav Tệp Windows *. wav

Sau tiêu đề và một dòng trống, bạn chỉ cần in dữ liệu theo mẫu mình cần. Nếu bạn đang gửi HTML, hãy in các thẻ và dữ liệu HTML ra thiết bị xuất chuẩn sau tiêu đề. Bạn cũng có thể gửi đồ họa, âm thanh và các tệp nhị phân khác bằng cách in nội dung của tệp ra thiết bị xuất chuẩn. Một số ví dụ về điều này được đưa ra trong Chương 4.

Cài đặt và chạy chương trình CGI

Phần này hơi khác so với lập trình CGI và nói về cách cấu hình máy chủ Web của bạn để sử dụng CGI, cài đặt và chạy các chương trình. Bạn sẽ được giới thiệu chi tiết hơn về các máy chủ khác nhau dành cho các nền tảng khác nhau, nhưng bạn sẽ phải tìm hiểu sâu hơn về tài liệu của máy chủ để tìm ra tùy chọn tốt nhất.

Tất cả các máy chủ đều yêu cầu dung lượng cho tệp máy chủ và dung lượng cho tài liệu HTML. Trong cuốn sách này, vùng máy chủ được gọi là ServerRoot và vùng tài liệu được gọi là DocumentRoot. Trên các máy UNIX, ServerRoot thường nằm trong /usr/local/etc/httpd/ và DocumentRoot thường nằm trong /usr/local/etc/httpd/htdocs/. Tuy nhiên, điều này sẽ không tạo ra bất kỳ sự khác biệt nào đối với hệ thống của bạn, vì vậy hãy thay thế tất cả các tham chiếu đến ServerRoot và DocumentRoot bằng ServerRoot và DocumentRoot của riêng bạn.

Khi bạn truy cập các tệp bằng trình duyệt Web, bạn chỉ định tệp trong URL tương ứng với DocumentRoot. Ví dụ: nếu địa chỉ máy chủ của bạn là mymachine.org thì bạn truy cập tệp này bằng URL sau: http://mymachine.org/index.html

Cấu hình máy chủ cho CGI

Hầu hết các máy chủ Web đều được cấu hình sẵn để cho phép sử dụng các chương trình CGI. Thông thường có hai tham số cho máy chủ biết tệp có phải là ứng dụng CGI hay không:

  • Thư mục được chỉ định. Một số máy chủ cho phép bạn xác định rằng tất cả các tệp trong thư mục được chỉ định (thường được gọi là cgi-bin theo mặc định) là CGI.
  • Phần mở rộng tên tệp. Nhiều máy chủ có cấu hình sẵn này cho phép tất cả các tệp kết thúc bằng .cgi được xác định là CGI.

Phương thức thư mục được chỉ định là một thứ gì đó đã lỗi thời (những máy chủ đầu tiên đã sử dụng nó làm phương pháp duy nhất để xác định tệp nào là chương trình CGI), nhưng nó có một số ưu điểm.

  • Nó giữ cho các chương trình CGI được tập trung, ngăn chặn các thư mục khác trở nên lộn xộn.
  • Bạn không bị giới hạn ở bất kỳ phần mở rộng tên tệp cụ thể nào, vì vậy bạn có thể đặt tên cho tệp của mình bất cứ điều gì bạn muốn. Một số máy chủ cho phép bạn chỉ định một số thư mục khác nhau làm thư mục CGI.
  • Nó cũng cung cấp cho bạn nhiều quyền kiểm soát hơn đối với những người có thể ghi lại CGI. Ví dụ: nếu bạn có máy chủ và hỗ trợ hệ thống có nhiều người dùng và không muốn họ sử dụng tập lệnh CGI của riêng họ mà không kiểm tra chương trình trước vì lý do bảo mật, bạn chỉ có thể chỉ định những tệp đó trong một thư mục tập trung, giới hạn là CGI . Sau đó, người dùng sẽ phải cung cấp cho bạn các chương trình CGI để cài đặt và trước tiên bạn có thể kiểm tra mã để đảm bảo chương trình không có bất kỳ vấn đề bảo mật lớn nào.

Ký hiệu CGI thông qua phần mở rộng tên tệp có thể hữu ích do tính linh hoạt của nó. Bạn không bị giới hạn trong một thư mục duy nhất cho các chương trình CGI. Hầu hết các máy chủ có thể được cấu hình để nhận dạng CGI thông qua phần mở rộng tên tệp, mặc dù không phải tất cả đều được cấu hình theo cách này theo mặc định.

Cảnh báo

Hãy nhớ tầm quan trọng của vấn đề bảo mật khi bạn định cấu hình máy chủ của mình cho CGI. Một số mẹo sẽ được đề cập ở đây và Chương 9, Bảo vệ CGI, đề cập đến các khía cạnh này một cách chi tiết hơn.

Cài đặt CGI trên máy chủ UNIX

Bất kể máy chủ UNIX của bạn được cấu hình như thế nào, có một số bước bạn cần thực hiện để đảm bảo rằng các ứng dụng CGI của bạn chạy như mong đợi. Máy chủ Web của bạn thường sẽ chạy như một người dùng không tồn tại (nghĩa là không ai là người dùng UNIX - một tài khoản không có quyền truy cập tệp và không thể đăng nhập). Các tập lệnh CGI (được viết bằng Perl, shell Bourne hoặc ngôn ngữ kịch bản khác) phải có khả năng thực thi và đọc được trên toàn thế giới.

manh mối

Để làm cho các tệp của bạn có thể đọc được và thực thi được trên thế giới, hãy sử dụng lệnh quyền UNIX sau: tên tệp chmod 755.

Nếu bạn đang sử dụng ngôn ngữ kịch bản lệnh như Perl hoặc Tcl, hãy cung cấp đường dẫn đầy đủ của trình thông dịch trên dòng đầu tiên của tập lệnh. Ví dụ: tập lệnh Perl sử dụng Perl trong thư mục /usr/local/bin sẽ bắt đầu bằng dòng sau:

#!/usr/local/bin/Perl

Cảnh báo

Không bao giờ đặt trình thông dịch (perl hoặc nhị phân Tcl Wish) trong thư mục /cgi-bin. Điều này tạo ra rủi ro bảo mật trên hệ thống của bạn. Điều này sẽ được thảo luận chi tiết hơn trong Chương 9.

Một số máy chủ UNIX chung

Máy chủ NCSA và Apache có các tệp cấu hình tương tự nhau vì máy chủ Apache ban đầu dựa trên mã NCSA. Theo mặc định, chúng được cấu hình sao cho bất kỳ tệp nào trong thư mục cgi-bin (được đặt mặc định trong ServerRoot) đều là chương trình CGI. Để thay đổi vị trí của thư mục cgi-bin, bạn có thể chỉnh sửa tệp cấu hình conf/srm.conf. Định dạng để cấu hình thư mục này là

ScriptAlias ​​​​fakedirectoryname realdirectoryname

trong đó fakedirectoryname là tên thư mục giả (/cgi-bin) và realdirectoryname là đường dẫn đầy đủ nơi các chương trình CGI thực sự được lưu trữ. Bạn có thể định cấu hình nhiều ScriptAlias ​​bằng cách thêm nhiều dòng ScriptAlias.

Cấu hình mặc định đủ dùng cho hầu hết nhu cầu của người dùng. Bạn cần chỉnh sửa dòng trong tệp srm.conf trong cả hai trường hợp để xác định tên thư mục thực chính xác. Ví dụ: nếu các chương trình CGI của bạn được đặt trong /usr/local/etc/httpd/cgi-bin, thì dòng ScriptAlias ​​​​trong tệp srm.conf của bạn sẽ giống như thế này:

ScriptAlias ​​/cgi-bin/ /usr/local/etc/httpd/cgi-bin/

Để truy cập hoặc liên kết đến các chương trình CGI nằm trong thư mục này, hãy sử dụng URL sau:

Http://tên máy chủ/cgi-bin/tên chương trình

Trong đó tên máy chủ là tên máy chủ của máy chủ Web của bạn và tên chương trình là tên CGI của bạn.

Ví dụ: giả sử bạn sao chép chương trình hello.cgi vào thư mục cgi-bin (ví dụ: /usr/local/etc/httpd/cgi-bin) trên máy chủ Web của bạn có tên là www.company.com. Để truy cập CGI của bạn, hãy sử dụng URL sau: http://www.company.com/cgi-bin/hello.cgi

Nếu bạn muốn định cấu hình máy chủ NCSA hoặc Apache của mình để nhận dạng bất kỳ tệp nào có phần mở rộng .cgi là CGI, bạn cần chỉnh sửa hai tệp cấu hình. Đầu tiên, trong tệp srm.conf, bỏ ghi chú dòng sau:

Ứng dụng AddType/x-httpd-cgi .cgi

Điều này sẽ liên kết CGI loại MIME với phần mở rộng .cgi. Bây giờ, chúng ta cần thay đổi tệp access.conf để có thể chạy CGI trong bất kỳ thư mục nào. Để thực hiện việc này, hãy thêm tùy chọn ExecCGI vào dòng Tùy chọn. Nó sẽ trông giống như dòng sau:

Chỉ mục tùy chọn FollowSymLinks ExecCGI

Bây giờ, bất kỳ tệp nào có phần mở rộng .cgi đều được coi là CGI; truy cập nó như bất kỳ tập tin nào trên máy chủ của bạn.

Máy chủ CERN được cấu hình giống như máy chủ Apache và NCSA. Thay vì ScriptAlias, máy chủ CERN sử dụng lệnh Exec. Ví dụ: trong tệp httpd.conf, bạn sẽ thấy dòng sau:

Thực thi /cgi-bin/* /usr/local/etc/httpd/cgi-bin/*

Các máy chủ UNIX khác có thể được cấu hình theo cách tương tự; Điều này được mô tả chi tiết hơn trong tài liệu máy chủ.

Cài đặt CGI trên Windows

Hầu hết các máy chủ có sẵn cho Windows 3.1, Windows 95 và Windows NT đều được cấu hình bằng phương pháp "phần mở rộng tên tệp" để nhận dạng CGI. Nói chung, việc thay đổi cấu hình của máy chủ chạy trên Windows chỉ cần chạy chương trình cấu hình máy chủ và thực hiện các thay đổi thích hợp.

Đôi khi việc cấu hình máy chủ để chạy tập lệnh (chẳng hạn như Perl) một cách chính xác có thể khó khăn. Trong DOS hoặc Windows, bạn sẽ không thể chỉ định trình thông dịch ở dòng đầu tiên của tập lệnh, như trường hợp của UNIX. Một số máy chủ có cấu hình được xác định trước để liên kết các phần mở rộng tên tệp nhất định với trình thông dịch. Ví dụ: nhiều máy chủ Web Windows cho rằng các tệp kết thúc bằng .pl là các tập lệnh Perl.

Nếu máy chủ không thực hiện kiểu liên kết tệp này, bạn có thể xác định một tệp bó của trình đóng gói gọi cả trình thông dịch và tập lệnh. Giống như máy chủ UNIX, không cài đặt trình thông dịch trong thư mục cgi-bin hoặc bất kỳ thư mục nào có thể truy cập được trên Web.

Cài đặt CGI trên Macintosh

Hai tùy chọn máy chủ nổi tiếng nhất dành cho Macintosh là WebStar StarNine và phiên bản tiền nhiệm MacHTTP của nó. Cả hai đều nhận ra CGI bằng phần mở rộng tên tệp của nó.

MacHTTP hiểu hai phần mở rộng khác nhau: .cgi và .acgi, viết tắt của CGI không đồng bộ. Các chương trình CGI thông thường được cài đặt trên máy Macintosh (có phần mở rộng .cgi) sẽ giữ máy chủ Web ở trạng thái bận cho đến khi CGI chạy xong, khiến máy chủ tạm dừng tất cả các yêu cầu khác. Mặt khác, CGI không đồng bộ cho phép máy chủ chấp nhận các yêu cầu ngay cả khi nó đang chạy.

Nhà phát triển CGI Macintosh sử dụng bất kỳ máy chủ Web nào trong số này, nếu có thể, chỉ nên sử dụng phần mở rộng .acgi thay vì phần mở rộng .cgi. Nó sẽ hoạt động với hầu hết các chương trình CGI; nếu nó không hoạt động, hãy đổi tên chương trình thành .cgi.

Thực thi CGI

Khi bạn đã cài đặt CGI, có một số cách để thực thi nó. Nếu chương trình CGI của bạn là chương trình chỉ xuất ra, chẳng hạn như chương trình Hello,World!, thì bạn có thể thực thi nó một cách đơn giản bằng cách truy cập URL của nó.

Hầu hết các chương trình chạy dưới dạng ứng dụng máy chủ trên biểu mẫu HTML. Trước khi tìm hiểu cách lấy thông tin từ các biểu mẫu này, trước tiên hãy đọc phần giới thiệu ngắn về cách tạo các biểu mẫu đó.

Hướng dẫn nhanh về biểu mẫu HTML

Hai thẻ quan trọng nhất trong biểu mẫu HTML là

. Bạn có thể tạo hầu hết các biểu mẫu HTML chỉ bằng hai thẻ này. Trong chương này, bạn sẽ khám phá các thẻ này và một tập hợp nhỏ các loại hoặc thuộc tính có thể có. . Hướng dẫn đầy đủ và liên kết đến các biểu mẫu HTML có trong Chương 3, HTML và Biểu mẫu.

Nhãn

Nhãn được sử dụng để xác định phần nào của tệp HTML sẽ được sử dụng cho thông tin do người dùng nhập. Điều này đề cập đến cách hầu hết các trang HTML gọi chương trình CGI. Thuộc tính thẻ chỉ định tên và vị trí của chương trình - cục bộ hoặc dưới dạng URL đầy đủ, loại mã hóa được sử dụng và phương thức di chuyển dữ liệu được chương trình sử dụng.

Dòng tiếp theo hiển thị thông số kỹ thuật cho thẻ :

< ACTION FORM = "url" METHOD = ENCTYPE = "..." >

Thuộc tính ENCTYPE không có vai trò đặc biệt và thường không có trong thẻ . Thông tin chi tiết về thẻ ENCTYPE được nêu trong Chương 3. Một cách sử dụng ENCTYPE được trình bày trong Chương 14, "Tiện ích mở rộng có thương hiệu".

Thuộc tính ACTION đề cập đến URL của chương trình CGI. Sau khi người dùng điền vào biểu mẫu và cung cấp thông tin, tất cả thông tin sẽ được mã hóa và chuyển sang chương trình CGI. Bản thân chương trình CGI giải quyết được vấn đề giải mã và xử lý thông tin; Khía cạnh này sẽ được thảo luận trong phần "Chấp nhận đầu vào từ trình duyệt" ở phần sau của chương này.

Cuối cùng, thuộc tính METHOD mô tả cách chương trình CGI nhận đầu vào. Hai phương thức GET và POST khác nhau ở cách chúng truyền thông tin đến chương trình CGI. Cả hai đều được thảo luận trong phần "Chấp nhận đầu vào từ trình duyệt".

Để trình duyệt cho phép người dùng nhập liệu, tất cả các thẻ biểu mẫu và thông tin phải được bao quanh bởi thẻ . Đừng quên thẻ đóng

để chỉ ra sự kết thúc của biểu mẫu. Bạn không thể có một biểu mẫu bên trong một biểu mẫu, mặc dù bạn có thể thiết lập một biểu mẫu cho phép bạn trình bày các mẩu thông tin ở những nơi khác nhau; khía cạnh này được thảo luận rộng rãi trong Chương 3.

Nhãn

Bạn có thể tạo thanh nhập văn bản, nút radio, hộp kiểm và các phương tiện chấp nhận đầu vào khác bằng thẻ . Phần này chỉ bao gồm các trường nhập văn bản. Để triển khai trường này, hãy sử dụng thẻ với các thuộc tính sau:

< INPUT TYPE=text NAME = "... " VALUE = "... " SIZE = MAXLENGTH = >

NAME là tên tượng trưng của biến chứa giá trị do người dùng nhập vào. Nếu bạn đưa văn bản vào thuộc tính VALUE thì văn bản đó sẽ được đặt làm mặc định trong trường nhập văn bản. Thuộc tính SIZE cho phép bạn chỉ định độ dài theo chiều ngang của trường nhập vì nó sẽ xuất hiện trong cửa sổ trình duyệt. Cuối cùng, MAXLENGTH chỉ định số lượng ký tự tối đa mà người dùng có thể nhập vào trường. Xin lưu ý rằng các thuộc tính VALUE, SIZE, MAXLENGTH là tùy chọn.

Nộp mẫu

Nếu bạn chỉ có một trường văn bản trong biểu mẫu, người dùng có thể gửi biểu mẫu bằng cách nhập thông tin trên bàn phím và nhấn Enter. Nếu không, phải có cách nào khác để người dùng trình bày thông tin. Người dùng gửi thông tin bằng nút gửi có thẻ sau:

< Input type=submit >

Thẻ này tạo nút Gửi bên trong biểu mẫu của bạn. Khi người dùng điền xong biểu mẫu, họ có thể gửi nội dung của nó tới URL được chỉ định bởi thuộc tính ACTION của biểu mẫu bằng cách nhấp vào nút Gửi.

Chấp nhận đầu vào từ trình duyệt

Trên đây là ví dụ về việc ghi lại chương trình CGI gửi thông tin từ máy chủ đến trình duyệt. Trong thực tế, một chương trình CGI chỉ xuất dữ liệu thì không có nhiều ứng dụng (một số ví dụ được đưa ra ở Chương 4). Khả năng quan trọng hơn của CGI là nhận thông tin từ trình duyệt - tính năng mang lại cho Web tính chất tương tác.

Chương trình CGI nhận hai loại thông tin từ trình duyệt.

  • Đầu tiên, nó thu được nhiều thông tin khác nhau về trình duyệt (loại trình duyệt, nội dung nó có thể xem, máy chủ lưu trữ, v.v.), máy chủ (tên và phiên bản, cổng thực thi của nó, v.v.) và chương trình CGI chính nó (tên chương trình và vị trí của nó). Máy chủ cung cấp tất cả thông tin này cho chương trình CGI thông qua các biến môi trường.
  • Thứ hai, chương trình CGI có thể nhận đầu vào của người dùng. Thông tin này, sau khi được trình duyệt mã hóa, sẽ được gửi thông qua biến môi trường (phương thức GET) hoặc thông qua đầu vào tiêu chuẩn (phương thức stdin - POST).

Biến môi trường

Sẽ rất hữu ích khi biết những biến môi trường nào có sẵn cho chương trình CGI, cả trong quá trình đào tạo và gỡ lỗi. Bảng 2.2 liệt kê một số biến môi trường CGI có sẵn. Bạn cũng có thể viết chương trình CGI xuất các biến môi trường và giá trị của chúng tới trình duyệt Web.

Bảng 2.2. Một số biến môi trường CGI quan trọng Mục đích biến môi trường REMOTE_ADDR Địa chỉ IP của máy khách. REMOTE_HOST Máy chủ của máy khách. HTTP _ACCEPT Liệt kê các loại dữ liệu MIME mà trình duyệt có thể hiểu. HTTP _USER_AGENT Thông tin trình duyệt (loại trình duyệt, số phiên bản, hệ điều hành, v.v.). REQUEST_METHOD NHẬN hoặc ĐĂNG. CONTENT_LENGTH Kích thước của đầu vào nếu được gửi qua POST. Nếu không có đầu vào hoặc nếu phương thức GET được sử dụng thì tham số này sẽ không được xác định. QUERY_STRING Chứa thông tin đầu vào khi nó được truyền bằng phương thức GET. PATH_INFO Cho phép người dùng chỉ định đường dẫn từ dòng lệnh CGI (ví dụ: http://hostname/cgi-bin/programname/path). PATH_TRANSLATED Dịch đường dẫn tương đối trong PATH_INFO thành đường dẫn thực tế trên hệ thống.

Để viết một ứng dụng CGI hiển thị các biến môi trường, bạn cần biết cách thực hiện hai điều:

  • Xác định tất cả các biến môi trường và giá trị tương ứng của chúng.
  • In kết quả ra trình duyệt.

Bạn đã biết cách thực hiện thao tác cuối cùng. Trong Perl, các biến môi trường được lưu trữ trong mảng kết hợp %ENV, được giới thiệu bằng tên của biến môi trường. Liệt kê 2.3 chứa env.cgi, một chương trình Perl hoàn thành mục tiêu của chúng ta.

Liệt kê 2.3. Một chương trình Perl, env.cgi, in ra tất cả các biến môi trường CGI.

#!/usr/local/bin/Perl print "Loại nội dung: text/html\n\n"; in " \n"; in " Môi trường CGI\n"; in "\n"; in " \n"; in "

Môi trường CGI

\n"; foreach $env_var (khóa %ENV) ( print " $env_var= $ENV($env_var)
\n"; ) in " \N";

Một chương trình tương tự có thể được viết bằng C; mã hoàn chỉnh có trong Liệt kê 2.4.

Liệt kê 2.4. Env.cgi.c trong C. /* env.cgi.c */ #include char bên ngoài ** môi trường; int main() ( char **p = environ; printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" Môi trường CGI\n"); printf("\n"); printf(" \n"); printf("

Môi trường CGI

\n"); while(*p != NULL) printf("%s
\n",*p++); printf(" \N"); )

NHẬN hoặc ĐĂNG?

Sự khác biệt giữa phương thức GET và POST là gì? GET chuyển chuỗi đầu vào được mã hóa thông qua biến môi trường QUERY_STRING, trong khi POST chuyển chuỗi đó qua stdin. POST là phương thức được ưu tiên, đặc biệt đối với các biểu mẫu có nhiều dữ liệu, vì không có hạn chế về lượng thông tin được gửi, trong khi với phương thức GET, lượng không gian phương tiện bị hạn chế. Tuy nhiên, GET có một đặc tính hữu ích nhất định; điều này được trình bày chi tiết trong Chương 5, Đầu vào.

Để xác định phương thức nào được sử dụng, chương trình CGI kiểm tra biến môi trường REQUEST_METHOD, biến này sẽ được đặt thành GET hoặc POST. Nếu nó được đặt thành POST, độ dài của thông tin được mã hóa sẽ được lưu trữ trong biến môi trường CONTENT_LENGTH.

Đầu vào được mã hóa

Khi người dùng gửi biểu mẫu, trước tiên trình duyệt sẽ mã hóa thông tin trước khi gửi nó đến máy chủ và sau đó đến ứng dụng CGI. Khi bạn sử dụng thẻ , mỗi trường được đặt một tên tượng trưng. Giá trị do người dùng nhập vào được biểu diễn dưới dạng giá trị của biến.

Để xác định điều này, trình duyệt sử dụng đặc tả mã hóa URL, có thể được mô tả như sau:

  • Phân tách các trường khác nhau bằng ký hiệu (&).
  • Phân tách tên và giá trị bằng dấu bằng (=), tên ở bên trái và giá trị ở bên phải.
  • Thay thế dấu cách bằng dấu cộng (+).
  • Thay thế tất cả các ký tự "bất thường" bằng dấu phần trăm (%) theo sau là mã hex gồm hai chữ số cho ký tự.

Chuỗi được mã hóa cuối cùng của bạn sẽ tương tự như sau:

Name1=value1&name2=value2&name3=value3 ...

Lưu ý: Thông số kỹ thuật mã hóa URL có trong RFC1738.

Ví dụ: giả sử bạn có một biểu mẫu yêu cầu tên và tuổi. Mã HTML được sử dụng để hiển thị biểu mẫu này được hiển thị trong Liệt kê 2.5.

Liệt kê 2.5. Mã HTML để hiển thị mẫu tên và tuổi.

Tên và tuổi

Nhập tên của bạn:

Nhập tuổi của bạn:

Giả sử người dùng nhập Joe Schmoe vào trường tên và 20 vào trường tuổi. Đầu vào sẽ được mã hóa trong chuỗi đầu vào.

Tên=Joe+Schmoe&age=20

Phân tích đầu vào

Để thông tin này hữu ích, bạn cần sử dụng thông tin về thứ gì đó mà chương trình CGI của bạn có thể sử dụng. Các chiến lược phân tích cú pháp đầu vào được đề cập trong Chương 5. Trong thực tế, bạn sẽ không bao giờ phải suy nghĩ về cách phân tích cú pháp đầu vào, bởi vì một số chuyên gia đã viết các thư viện thực hiện phân tích cú pháp mà mọi người đều có thể truy cập được. Hai thư viện như vậy được trình bày trong chương này trong các phần sau: cgi -lib.pl cho Perl (do Steve Brenner viết) và cgihtml cho C (do tôi viết).

Mục tiêu chung của hầu hết các thư viện được viết bằng nhiều ngôn ngữ khác nhau là phân tích một chuỗi được mã hóa và đặt các cặp tên và giá trị vào cấu trúc dữ liệu. Có một lợi thế rõ ràng khi sử dụng ngôn ngữ có cấu trúc dữ liệu tích hợp như Perl; tuy nhiên, hầu hết các thư viện dành cho các ngôn ngữ cấp thấp như C và C++ đều bao gồm cấu trúc dữ liệu và thực thi chương trình con.

Không cần thiết phải có sự hiểu biết đầy đủ về thư viện; điều quan trọng hơn là học cách sử dụng chúng như những công cụ giúp công việc của người lập trình CGI trở nên dễ dàng hơn.

Cgi-lib.pl

Cgi-lib.pl sử dụng mảng kết hợp Perl. Hàm &ReadParse phân tích chuỗi đầu vào và nhập từng cặp tên/giá trị theo tên. Ví dụ: các chuỗi Perl tương ứng cần thiết để giải mã chuỗi đầu vào "tên/tuổi" vừa trình bày sẽ là

&ReadParse(*đầu vào);

Bây giờ, để xem giá trị được nhập cho "name", bạn có thể truy cập vào mảng kết hợp $input("name"). Tương tự, để truy cập giá trị của "age", bạn cần xem biến $input ("age").

Cgihtml

C không có bất kỳ cấu trúc dữ liệu tích hợp nào, do đó cgihtml triển khai danh sách liên kết của riêng nó để sử dụng với các quy trình phân tích cú pháp CGI của nó. Điều này xác định cấu trúc entrytype như sau:

Typedef struct ( Char *name; Char *value; ) Entrytype;

Để phân tích chuỗi đầu vào "tên/tuổi" trong C bằng cgihtml, cách sau được sử dụng:

/* khai báo một danh sách liên kết gọi là input */ Llist input; /* phân tích đầu vào và vị trí trong danh sách liên kết */ read_cgi_input(&input);

Để truy cập thông tin về độ tuổi, bạn có thể phân tích danh sách theo cách thủ công hoặc sử dụng hàm cgi _val() có sẵn.

#bao gồm #bao gồm Char *age = malloc(sizeof(char)*strlen(cgi_val(input, "age")) + 1); Strcpy(tuổi, cgi_val(đầu vào, "tuổi"));

Giá trị "tuổi" hiện được lưu trữ trong chuỗi tuổi.

Lưu ý: Thay vì sử dụng một mảng đơn giản (như char age ;), tôi đang phân bổ động không gian bộ nhớ cho tuổi chuỗi. Mặc dù điều này làm cho việc lập trình trở nên khó khăn hơn nhưng nó vẫn quan trọng từ quan điểm bảo mật. Điều này sẽ được thảo luận chi tiết hơn ở Chương 9.

Một chương trình CGI đơn giản

Bạn sắp viết một chương trình CGI có tên nameage.cgi để xử lý biểu mẫu tên/tuổi. Việc xử lý dữ liệu (cái mà tôi thường gọi là "thứ ở giữa") là ở mức tối thiểu. Nameage.cgi chỉ cần giải mã đầu vào và hiển thị tên và tuổi của người dùng. Mặc dù công cụ như vậy không được sử dụng nhiều nhưng nó thể hiện khía cạnh quan trọng nhất của lập trình CGI: đầu vào và đầu ra.

Bạn sử dụng biểu mẫu tương tự như trên, gọi trường "tên và tuổi". Đừng lo lắng về sự mạnh mẽ và hiệu quả; giải quyết vấn đề hiện tại một cách đơn giản nhất. Các giải pháp Perl và C lần lượt được hiển thị trong Danh sách 2.6 và 2.7.

Liệt kê 2.6. Nameage.cgi trong Perl

#!/usr/local/bin/Perl # nameage.cgi require "cgi-lib.pl" &ReadParse(*input); print "Loại nội dung: text/html\r\n\r\n"; in " \n"; in " Tên và tuổi\n"; in "\n"; in " \n"; print "Xin chào, " . $input("name") . ". Bạn là\n"; print $input("age") . " tuổi.

\n"; in " \N";

Liệt kê 2.7. nameage.cgi trong C

/* nameage.cgi.c */ #include #include "cgi-lib.h" int main() ( llist input; read_cgi_input(&input); printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" Tên và tuổi\n"); printf("\n"); printf(" \n"); printf("Xin chào, %s. Bạn là\n",cgi_val(input,"name")); printf("%s tuổi.

\n",cgi_val(đầu vào,"tuổi")); printf(" \N"); )

Xin lưu ý rằng hai chương trình này gần như tương đương nhau. Cả hai đều chứa các quy trình phân tích cú pháp chỉ chiếm một dòng và xử lý toàn bộ dữ liệu đầu vào (nhờ các quy trình thư viện tương ứng). Kết quả đầu ra về cơ bản là một phiên bản sửa đổi của chương trình Hello, World! chính của bạn.

Hãy thử chạy chương trình bằng cách điền vào biểu mẫu và nhấp vào nút Gửi.

Chiến lược lập trình chung

Bây giờ bạn đã biết tất cả các nguyên tắc cơ bản cần thiết cho lập trình CGI. Khi bạn hiểu cách CGI nhận thông tin và cách nó gửi thông tin trở lại trình duyệt, chất lượng thực tế của sản phẩm cuối cùng phụ thuộc vào khả năng lập trình chung của bạn. Cụ thể là, khi bạn lập trình CGI (hoặc bất cứ thứ gì), hãy ghi nhớ những phẩm chất sau:

  • Sự đơn giản
  • Hiệu quả
  • Tính linh hoạt

Hai phẩm chất đầu tiên khá phổ biến: cố gắng làm cho mã của bạn dễ đọc và hiệu quả nhất có thể. Tính linh hoạt áp dụng cho các chương trình CGI nhiều hơn so với các ứng dụng khác. Khi bắt đầu phát triển các chương trình CGI của riêng mình, bạn sẽ biết rằng có một số ứng dụng cơ bản mà mọi người đều muốn tạo ra. Ví dụ: một trong những nhiệm vụ phổ biến và rõ ràng nhất của chương trình CGI là xử lý biểu mẫu và gửi kết quả qua email cho một người nhận cụ thể. Bạn có thể xử lý nhiều biểu mẫu riêng biệt, mỗi biểu mẫu có một người nhận khác nhau. Thay vì viết chương trình CGI cho từng biểu mẫu riêng lẻ, bạn có thể tiết kiệm thời gian bằng cách viết chương trình CGI tổng quát hơn áp dụng cho tất cả các biểu mẫu.

Bằng cách trình bày tất cả các khía cạnh cơ bản của CGI, tôi đã cung cấp cho bạn đủ thông tin để bắt đầu lập trình CGI. Tuy nhiên, để trở thành nhà phát triển CGI hiệu quả, bạn cần hiểu sâu hơn về cách CGI giao tiếp với máy chủ và trình duyệt. Phần còn lại của cuốn sách này trình bày chi tiết các vấn đề được đề cập ngắn gọn trong chương này, cũng như chiến lược phát triển ứng dụng cũng như những ưu điểm và hạn chế của giao thức.

Bản tóm tắt

Chương này giới thiệu ngắn gọn những điều cơ bản về lập trình CGI. Bạn tạo đầu ra bằng cách định dạng chính xác dữ liệu của mình và in ra thiết bị xuất chuẩn. Việc nhận đầu vào CGI phức tạp hơn một chút vì nó phải được phân tích cú pháp trước khi có thể sử dụng. May mắn thay, đã có sẵn một số thư viện thực hiện phân tích cú pháp.

Đến bây giờ bạn đã khá thoải mái với việc lập trình các ứng dụng CGI. Phần còn lại của cuốn sách này đi sâu vào chi tiết hơn về các thông số kỹ thuật, thủ thuật và chiến lược lập trình cho các ứng dụng phức tạp và nâng cao hơn.