SPEAKER: Hãy nói về một protocol-- Hypertext Transfer Nghị định thư, hoặc HTTP. Vì vậy, chúng tôi đã nói chuyện về IP và TCP trong video trước đó. Và đó là những giao thức rằng lệnh như thế nào thông tin di chuyển từ máy tính đến máy tính và từ chương trình để chương trình hoặc dịch vụ để phục vụ thông qua internet, qua mạng lưới này của router và máy móc. Nhưng đó là thường không toàn bộ hình ảnh, phải không? Thông thường khi chúng tôi gửi thông tin, chương trình itself-- khi dữ liệu là nhận, nói rằng, ví dụ, trong email thông qua cổng TCP 25 hoặc một web yêu cầu trang thông qua cổng 80, có thường là một hệ thống các quy tắc có để xử lý những gì tôi vừa mới nhận được. Và HTTP là một ví dụ chỉ là một giao thức như vậy. HTTP là chỉ giao thức lớp ứng dụng rằng chúng ta sẽ nói về. Nhưng nó là thiết lập khác các quy tắc đưa ra mệnh lệnh như thế nào thông tin được truyền đi và xử lý thông qua internet. Đặc biệt, HTTP quy định cụ thể chính xác như thế nào người ta phải tạo một yêu cầu cho một trang web và chính xác như thế nào một máy chủ, một máy mà chủ các trang web, cung cấp thông tin sao cho các khách hàng. Vì vậy, giao thức này không thực sự có bất cứ điều gì để làm với cách thông tin di chuyển từ điểm A đến điểm B. Nó thực sự hệ thống quy for-- nó về cơ bản các quy tắc của tham gia để làm việc với một trang web, tương tự như khi ai đó sóng bàn tay của họ vào bạn, bạn đang nghĩ để vẫy lại. Đó là loại một giao thức con người thông thường. Giao thức HTTP chỉ nói, nếu bạn muốn yêu cầu một web trang, đảm bảo định dạng ngoại hình của bạn như this-- loại định dạng như một lá thư kinh doanh, ví dụ. Và phản ứng sẽ tương tự đi theo giao thức này. Có khác các giao thức lớp ứng dụng rằng chúng ta sẽ không nói về trong video. Nhưng những bao gồm những thứ như File Transfer Protocol, Simple Mail Transfer Protocol cho gửi email, các phân phối dữ liệu Dịch vụ, Remote Desktop Nghị định thư, RDP, mà được sử dụng nếu bạn muốn truy cập từ xa máy tính của bạn từ một máy tính khác, XMPP, đó là thường xuyên được gọi là Jabber hoặc chat, vì vậy đây là giao thức sử dụng dịch vụ chat. Và có rất nhiều, rất nhiều, rất nhiều người khác. Vì vậy, mỗi khi bạn đang sử dụng một dịch vụ, dịch vụ được mong đợi thông tin được received-- một yêu cầu được received-- trong một định dạng đặc biệt rất và được yêu cầu trả về thông tin trở lại trong một định dạng rất đặc biệt là tốt. Vì vậy, chúng ta hãy quay trở lại để minh họa của chúng tôi chúng ta muốn nói chuyện với internet. Vì vậy, chúng tôi đang hạnh phúc, và chúng tôi muốn để đi đến cats.com, phải không? Vì vậy, nếu chúng ta chỉ nói chuyện với cats.com, chúng ta có thể nói một cái gì đó giống như hey, Tôi có thể nhìn thấy trang chủ của bạn? Và có thể sẽ cats.com đáp ứng, vâng, chắc chắn. Ở đây bạn đi. Vì vậy, đó là một loại con người các yêu cầu và trả lời. Có gì đó giống cái trong HTTP? Vâng, nó thực sự loại dịch khá sạch sẽ để một cái gì đó như thế này. Chúng tôi có thể nói GET / HTTP / 1.1 từ máy chủ cats.com. Vì vậy, về cơ bản những gì tôi đang làm ở đây là yêu cầu cho các www.cats.com/ trang web. Chúng ta thường bỏ qua các dấu gạch chéo ngày nay, nhưng đó sẽ chỉ là có nghĩa là trang web của cats.com. Oh, và bằng cách này, tôi sẽ được sử dụng phiên bản HTTP 1.1 để giao tiếp với bạn. Đó là loại tương tự nói, như thế, bằng cách này, Tôi sẽ được nói ở Pháp, hoặc bằng cách này, Tôi sẽ nói bằng tiếng Anh. Đó chỉ là định dạng của các giao thức. Nó cũng 1.0, đó là không thường được sử dụng nữa. Vì vậy, tôi đang nói HTTP 1.1, và Tôi muốn www.cats.com/. Xin vui lòng nhận được rằng đối với tôi. Và sau đó có các thông tin khác, too-- các dấu chấm, dấu chấm, dấu chấm ở đó, đó là thông tin về bạn là ai vậy cats.com sẽ biết được nơi để gửi cho nó. Nhưng đây là hai sắp xếp của bộ phận quan trọng ngay từ đầu của một HTTP request-- giống như khi bạn bắt đầu một thư bạn nói, bạn thân mến, trống. Điều này là rất giống nhau trong tinh thần đó. Và nếu cats.com sẽ nói, oh, chắc chắn, ở đây bạn đi. Họ có thể phản ứng như this-- Tôi cũng đáp ứng. Tôi cũng nói HTTP 1.1. Yêu cầu của bạn được chấp thuận, 200 OK. Những gì bạn đang về để nhận là HTML và sau đó dot, dot, chấm một số thông tin thêm. Và ở phía cuối của yêu cầu thực sự là HTML, ngôn ngữ đánh dấu, các nội dung của trang web của cats.com. Vì vậy, HTTP / 1.1-- Tôi xác nhận của bạn yêu cầu được chấp nhận thông qua HTTP 1.1. Yêu cầu của bạn đã được chấp thuận. Tôi có thể cung cấp cho bạn những gì bạn muốn, 200 OK. Bạn đang về để nhận được HTML. Và sau đó ở đây là HTML mà bạn yêu cầu. Nhưng đôi khi yêu cầu của chúng ta không luôn đi khá đúng theo kế hoạch. Tôi có thể xem trang cats.html của bạn? Vâng, những gì nếu họ nói, chúng tôi không có một trang cats.html, mà dường như loại không thực tế bởi vì họ đang cats.com. Bạn nghĩ rằng họ sẽ có cats.html. Nhưng OK. Vì vậy, đây là hai yếu tố sự tương tác của con người thông thường bây giờ chúng tôi đã có với cats.com. Làm thế nào mà dịch? Đây có thể là một cái gì đó quen thuộc với bạn. Yêu cầu của chúng tôi trông giống hệt nhau, ngoại trừ thay vì nhận được dấu gạch chéo chúng tôi bây giờ nhận cats.html. Vì vậy, bây giờ những gì cơ bản toàn bộ này yêu cầu được nói là hãy cho tôi www.cats.com/cats.html. Vì vậy, các máy chủ và trung bình các một phần của dòng đầu có chỉ ra chính xác những trang tôi yêu cầu. Nhưng cats.com trong trường hợp này không phải là đi để có thể phản ứng tích cực. Họ không biết chúng ta đang nói về. Và do đó, đây là một cái gì đó bạn có thể có thấy before-- HTTP 1.1 404 Not Found. Tôi không thể tìm thấy những gì bạn đã yêu cầu. Bằng cách này, tôi sẽ cung cấp cho bạn lại một số HTML, và thường là HTML là nội dung của một số trang 404. Và trong trường hợp của cats.com, nó có thể là một số con mèo dễ thương trong chiếc giỏ với 404 khuôn mặt buồn bên cạnh họ, bởi vì bạn sẽ được buồn khi bạn không có một trang mà bạn đang tìm kiếm. Đó là loại vấn đề cơ bản của những gì một giao thức, các yêu cầu giao thức HTTP giống như. Họ đang thực sự tương tự như cách chúng tôi sẽ làm cho một sự tương tác tương tự trong công ước chỉ là con người hỏi xem có gì và lấy lại được hoặc viết một thư và chờ đợi một phản ứng thư trong một định dạng cụ thể. Đó là khá nhiều những gì HTTP chỉ là canonicalizing cho tất cả các thiết bị mà muốn truy cập các trang web, chuyển siêu văn bản. Vì vậy, một dòng của biểu mẫu, này phương pháp phiên bản yêu cầu mục tiêu HTTP, được gọi là một dòng yêu cầu HTTP. Nó thường là điều đầu tiên mà là truyền như là một phần của một yêu cầu HTTP hoặc nếu bạn đang yêu cầu HTTP. Nó loại thích, như tôi đã nói, nói dear, trống ở đầu thư của bạn. Họ biết rằng bạn đang viết cho họ một lá thư. Vì vậy, điều này là rất tương tự để nói, tôi biết rằng họ đang thực hiện một yêu cầu HTTP và đây là định dạng đặc biệt họ đang yêu cầu. Phiên bản HTTP có lẽ luôn luôn có được HTTP / 1/1. 1.0 còn tồn tại nhưng không phải là thực sự được sử dụng nữa. Đối với mục đích của CS50, GET là có thể luôn luôn những gì bạn sẽ được sử dụng khi bạn đang thực sự làm cho các yêu cầu HTTP trực tiếp. Nhưng POST là một lựa chọn khác mà chúng tôi sẽ không nói về ngay bây giờ. Và sau đó yêu cầu mục tiêu là những gì trang trên máy chủ của máy chủ bạn muốn để có được. Như tôi đã nói, rằng hostname là một dòng riêng biệt, thường dòng thứ hai của các yêu cầu chung. Và như vậy lấy nhau, máy chủ tên và các mục tiêu yêu cầu chỉ định cụ thể tài nguyên đang được tìm kiếm. Trong ví dụ của chúng tôi 404 một giây trước đó, tôi đã được hỏi một lần nữa cho www.cats.com, cats.com là chủ nhà. Và trong dòng yêu cầu của tôi, Tôi nói /cats.html. Đó là mục tiêu yêu cầu của tôi. Vì vậy, nhìn chung, tôi đã được yêu cầu cho các nội dung hoặc các tài nguyên nằm tại www.cats.com/cats.html. Và sau đó dựa vào việc các nguồn tài nguyên tồn tại và liệu các máy chủ có thể cung cấp các nguồn tài nguyên theo quy định của khách hàng yêu cầu, bạn có thể nhận được Mã trạng thái khác nhau lại. Một số các mã trạng thái mà bạn đã nhìn thấy vì chúng là một phần của đáp ứng. Một số trong số họ, 200 OK, là có lẽ là khá im lặng. Bạn đã có thể chưa bao giờ thấy một trang đáp ứng 200 OK. Bạn chỉ cần có được trang. Nó không giống như một lỗi 404, mà thường là khá rõ ràng. Bạn thường thấy rằng nó nói 404. Vì vậy, chúng ta hãy nói về những gì một số của những mã số trạng thái có thể được. Một lần nữa, khi các máy chủ trả lời cho chúng tôi, chúng sẽ đáp ứng HTTP status phiên bản. Thường HTTP / 1.1. Các mã trạng thái sẽ là gì? Vâng, chúng ta có thể có được một thành công. Vì vậy, trong các thể loại thành công, chúng tôi có thể nhận được mã 200 với các văn bản OK. Điều đó có nghĩa là gì? Vâng, tất cả mọi thứ là tốt. Bạn đã thực hiện một yêu cầu hợp lệ. Dưới đây là một phản ứng hợp lệ. Tôi đã có thể cung cấp chính xác những gì bạn muốn. Đôi khi bạn có thể có được những thứ khác rằng bạn sẽ không nhận thấy ngay lập tức nhưng có phần thất bại. Họ được gọi là chuyển hướng. Có hai cái phổ biến ở đây. 301 Permanently-- Đã chuyển điều này về cơ bản có nghĩa là là trang hiện tại là một vị trí mới. Nó sẽ sống ở đó mãi mãi. Và hầu hết các trình duyệt sẽ tự động chuyển hướng bạn. Vì vậy, bạn sẽ không bao giờ thực sự nhìn thấy 301, hoặc, trừ khi bạn đang sử dụng một thực sự out-of-date trình duyệt, có thể, vì phản ứng 301 là một phần của các dấu chấm, dấu chấm, dấu chấm của các phản ứng 301. Nó cũng cho bạn biết nơi trang mới. Và vì vậy hầu hết các trình duyệt sẽ chỉ cần chuyển hướng bạn có, giả sử rằng bạn muốn đi đến đó. Đôi khi bạn cũng sẽ nhận được 302 Found. Và một trong những bạn thực sự vẫn có thể nhìn thấy đôi. Đôi khi các trang di chuyển tạm thời. Vì vậy, nó sẽ không được xây dựng thành yêu cầu cho trình duyệt để thay đổi vĩnh viễn bất cứ lúc nào nó thấy các yêu cầu mà bạn làm thay đổi nó cho một cái gì đó khác. Vì vậy, bạn có thể thấy 302 Tìm thấy, mà cơ bản nói trang này sống ở một nơi khác. Nhưng nó không phải đi để sống ở đó mãi mãi. Nó cuối cùng sẽ có thể đi trở lại nơi mà bạn nghĩ rằng đó là. Sau đó, bạn sẽ có được những điều như lỗi khách hàng. Vì vậy, đây là những cái bạn đã có thể nhìn thấy, bây giờ. Bạn có lẽ đã không nhìn thấy các 200s hoặc 300, nhưng có lẽ bạn đang quen thuộc với 400s. Và đó là những gì chúng ta sẽ nói về trong một giây, 500s là tốt. Bạn có thể thấy 401 Unauthorized. Thông thường điều này có nghĩa là bạn đang cố gắng để truy cập vào một trang, nhưng bạn đã không đăng nhập. Vì vậy, bạn cố gắng và đi đến một số hồ sơ hoặc một cái gì đó trên Facebook hoặc bạn thử và truy cập some-- bạn đang làm việc. Bạn đang cố gắng để truy cập vào một cái gì đó trên internet của công việc của bạn, nhưng bạn chưa đăng nhập. Bạn không thể xem trang. Bạn có thể nhận được 401 trái phép, có nghĩa là chúng ta có thể sẽ có thể đáp ứng yêu cầu này, nhưng trước tiên bạn cần phải đăng nhập để làm như vậy. Ngược lại, bạn có thể nhận được 403 Cấm, đó là nó không thực sự quan trọng nếu bạn đang đăng nhập hay không. Yêu cầu này không được phép. Các nguồn tài nguyên tồn tại trên máy chủ. Nhưng bạn không được phép truy cập vào nó. Đây là các file thường nội bộ sống trên các máy chủ vì nhiều lý do nhưng không dự định được truy cập từ thế giới bên ngoài, và do đó, họ bị cấm. Họ sống ở đó. Tôi không nói rằng tôi không thể tìm thấy nó. Nhưng tôi nói rằng tôi không thể đưa nó cho bạn. Và nó không quan trọng nếu bạn đang đăng nhập hay không. Và dĩ nhiên, các rất phổ biến 404 Not Found. Các tập tin không tồn tại trên máy chủ. Tôi muốn để đáp ứng yêu cầu của bạn, nhưng tôi không thể. Bạn cũng có đôi khi nhìn thấy máy chủ lỗi, phổ biến nhất thường là 500 Internal Server Error, mà không thực sự nói với bạn bất cứ điều gì tại tất cả về những gì đã đi sai. Nhưng nó không phải thực sự làm cho bạn một sai lầm trong yêu cầu của bạn. Nó thực sự là máy chủ thất bại để cung cấp theo yêu cầu bằng cách nào đó. Vì vậy, 500 là phản ứng chung. Bạn cũng sẽ thấy một cái gì đó như Service Unavailable, mà tôi tin là mã 503. Và Gateway Timeout-- nếu bao giờ bạn đã có một trang chỉ ngồi đó bốc tải và bốc và bạn không bao giờ biết nếu nó sẽ tải và sau đó cuối cùng nó chỉ says-- chỉ cho phép lên. Đó là một 504 Cổng Timeout. Các máy chủ muốn thực hiện yêu cầu của bạn, nhưng một cái gì đó đã đi sai trên side-- máy chủ không phải trên side-- của bạn gây ra mà là một vấn đề. Bây giờ, chúng ta có thể kết thúc câu chuyện ở đây, nhưng những gì tôi thực sự sẽ làm gì bây giờ là tôi sẽ mở ra trình duyệt của tôi và cho bạn làm thế nào bạn có thể có thể nhìn thấy một số các mã trạng thái thậm chí nếu bạn không thường thấy chúng. Và chúng ta sẽ làm điều đó bằng cách một cái nhìn tại một số công cụ phát triển. Tất cả các quyền Vì vậy, ở đây tôi bây giờ trong cửa sổ trình duyệt của tôi. Và tôi muốn tìm hiểu một chút thêm về các yêu cầu HTTP. Làm thế nào để tôi know-- chắc chắn chúng tôi biết nếu một Trang goes-- khi có điều gì sai, chúng tôi nhận được một 404. Tất cả chúng ta đã thấy điều đó. Chúng tôi không cần phải minh họa đó. Nhưng một số người khác là gì? Và làm thế nào chúng ta sẽ thấy những yêu cầu này trong hành động? Vì vậy, điều đầu tiên tôi sẽ làm là mở Công cụ phát triển. Vì vậy, công cụ phát triển được xây dựng vào hầu hết các trình duyệt hiện đại và cho phép chúng ta nhìn thấy mọi thứ rằng chúng ta không làm khác see-- một số thông tin thêm loại được truyền đi dưới web của chúng tôi yêu cầu. Tôi đang sử dụng Google Chrome tại đây. Và để mở Công cụ phát triển trong Chrome, bạn chỉ cần nhấn F-12, và nó sẽ mở nó lên trên mặt. Một khi tôi nhập các yêu cầu, tôi sẽ phóng to vì vậy chúng tôi có thể xem những gì đang xảy ra ở đây. Nhưng những gì tôi sẽ làm gì trong trình duyệt của tôi thanh is-- và tôi sẽ phóng to hơn here-- Tôi sẽ tạo một yêu cầu để www.google.com. Chúng ta tất cả đều có thể thực hiện yêu cầu này trước đây. Tôi sẽ nhấn Enter. Bây giờ, ở đây trong phát triển của tôi Công cụ, tôi đã chọn tab Network. Và bạn nhận thấy rất nhiều thứ ở đây. Nhìn vào these-- 200 OK, OK 200, một số của các mã trạng thái sắp tới. Tôi không biết lý do tại sao tôi nhận được 302 Tìm thấy. Tôi đã không nhận ra rằng tôi muốn xem một. Nhưng về cơ bản nhận thấy rằng khá nhiều, về request-- Google của tôi Tôi đã thực hiện rất đơn giản yêu cầu cho trang của Google. Và trong quá trình cung cấp các yêu cầu của tôi, Google dường như đã thực hiện rất nhiều các yêu cầu khác về thay cho tôi. Nhưng tôi đã thực hiện một yêu cầu get cho Google trang và tôi nhận được rất nhiều 200 OKS. Tôi không nhìn thấy 200 OK trên màn hình của tôi, nhưng tôi nhận được rất nhiều yêu cầu đã được thực hiện. Một chi tiết mà tôi khá chắc chắn là sẽ làm việc is-- cho những người bạn của những người thực sự là trường học cũ, bạn có thể biết rằng Facebook là không phải luôn ở Facebook.com. Trong ngày đầu của nó là tại wwww.thefacebook.com. Họ dường như không thể có được quyền truy cập để Facebook.com cho một thời gian. Và vì vậy những gì tôi mong đợi ở đây là để có được thông tin. Và chúng ta sẽ thấy nếu điều này chảo ra. Những gì tôi đang mong đợi ở đây là để có được thông tin rằng Facebook đã chuyển vĩnh viễn từ thefacebook.com để Facebook.com. Vì vậy, tôi hy vọng một nơi nào đó gần đầu yêu cầu của tôi hơn trong Công cụ phát triển của tôi để có được một thông báo 301 rằng Facebook đã chuyển vĩnh viễn. Một lần nữa, tôi sẽ không nhìn thấy 301 trên màn hình trình duyệt của tôi. Và bởi vì nó là một 301, đó là một động thái thường trực. Trình duyệt của tôi, đang được rằng đó là một trình duyệt hiện đại, có lẽ sẽ chuyển hướng tôi để Facebook.com anyway. Nhưng chúng ta hãy xem những gì sẽ xảy ra. Và bây giờ tôi sẽ đến đi đến thefacebook.com. Và vâng, có nó là ngay ở đầu trang. Nó đã đi xa, nhưng nó đã có. Hãy để tôi di chuyển lên đây. Ngay đây ở đầu trang. Tôi đã thực hiện một yêu cầu để thefacebook.com, và tôi nhận được một phản ứng mà trang này đã di chuyển vĩnh viễn. Và sau đó 307 ở đây là một chuyển hướng nội. Và vì vậy đây là những gì đã thực sự chuyển tôi đến nhiều hơn www.facebook.com quen thuộc. Vì vậy, các mã phản ứng làm vẫn còn xảy ra, ngay cả khi chúng ta không nhìn thấy chúng. Tôi sẽ không để minh họa 401, 403, 404, bởi vì bạn đã có thể nhìn thấy những thời điểm khác nhau. Và 500, tôi sẽ chỉ được loại of-- chúng tôi muốn có được may mắn nếu có một 500 bởi vì chúng ta không biết gì máy chủ hiện xuống bất cứ nơi nào. Nhưng các mã làm tồn tại, và có một cách để truy cập chúng ngay cả khi chúng ta không thấy họ tận mắt trên hệ thống của chúng tôi. Tôi Doug Lloyd. Đây là CS50.