diff --git "a/\345\217\266\346\242\246\347\224\237/20240517-http\347\275\221\345\235\200.md" "b/\345\217\266\346\242\246\347\224\237/20240517-http\347\275\221\345\235\200.md" new file mode 100644 index 0000000000000000000000000000000000000000..90f404bc364df941477e8d5c943c475c66824967 --- /dev/null +++ "b/\345\217\266\346\242\246\347\224\237/20240517-http\347\275\221\345\235\200.md" @@ -0,0 +1,75 @@ +## protocol +协议(Protocol)是指在通信中约定的规则和规范,用于确保不同系统、设备或应用程序之间可以进行有效的交流和数据传输。 + +在计算机网络中,协议定义了数据在网络中的传输格式、通信过程、错误处理等细节。它规定了通信双方的角色、消息的格式和语义,以及交互的顺序和流程。 + +常见的网络协议包括TCP/IP协议、HTTP协议、FTP协议、SMTP协议等。这些协议提供了不同层次上的功能,如网络连接建立、数据传输、路由选择、安全认证等,以满足各种不同的通信需求。 + +协议的使用可以使得不同的设备和系统能够相互理解并进行有效的通信,促进了互联网的发展和各种应用的实现。 + +## host +在HTTP协议中,"Host"是一个请求头部字段,用于指定要访问的主机名或域名。它告诉服务器应该处理该请求的目标主机。 + +当客户端发送HTTP请求时,会在请求头部中包含"Host"字段,格式如下: + +Host: hostname +其中,"hostname"表示要访问的主机名或域名。 + +使用"Host"字段的主要目的是支持虚拟主机(Virtual Host)功能。虚拟主机允许在同一台物理服务器上托管多个网站,每个网站都有自己的域名。通过在"Host"字段中指定不同的域名,服务器可以根据"Host"字段的值来确定要返回给客户端的具体网站内容。 + +例如,当访问 "http://www.example.com/page.html" 时,请求头部中的"Host"字段可能如下所示: + +Host: www.example.com +这样,服务器就能够根据"Host"字段中的域名来确定返回给客户端的是属于"www.example.com"网站的内容。 + +总结来说,"Host"是HTTP请求头部中的一个字段,用于指定要访问的主机名或域名。它是实现虚拟主机功能的重要组成部分,允许在同一台物理服务器上托管多个网站,并根据"Host"字段的值来确定返回给客户端的具体网站内容。 + +## port +在计算机网络中,端口(Port)用于标识不同的服务或应用程序。它是一个数字,范围从0到65535,被分为三个范围: + +知名端口(Well-known Ports):范围从0到1023,用于常见的网络服务,如HTTP(端口80)、HTTPS(端口443)、FTP(端口21)等。 + +注册端口(Registered Ports):范围从1024到49151,用于已经被注册的一些应用程序或服务。 + +动态/私有端口(Dynamic/Private Ports):范围从49152到65535,用于临时分配给客户端应用程序或服务。 + +当进行网络通信时,需要指定目标主机的IP地址和端口号。端口号用于将数据传输到正确的应用程序或服务。在TCP/IP协议中,端口号是通过16位的无符号整数表示。 + +例如,访问网站时,通常使用HTTP协议,默认的HTTP端口号是80。因此,当输入 "http://www.example.com" 时,实际上等同于 "http://www.example.com:80",其中":80"表示使用HTTP的默认端口。 + +除了默认端口外,有些应用程序可能会使用其他非默认端口。例如,FTP默认使用端口21,但可以通过指定不同的端口来连接到不同的FTP服务器。 + +总结来说,端口是用于标识不同服务或应用程序的数字。它是网络通信中的一部分,通过指定目标主机的IP地址和端口号,确保数据能够传输到正确的应用程序或服务。知名端口范围从0到1023,注册端口范围从1024到49151,动态/私有端口范围从49152到65535。 + +## query +在 HTTP 网址中,查询字符串(query string)是紧跟在 URL 路径之后的一部分,通常以问号 (?) 开头。查询字符串包含用来向 Web 服务器传递参数的键值对,参数之间使用 & 符号分隔。 + +例如,在以下网址中: + +https://www.example.com/search?q=apple&category=fruits + +查询字符串部分为 "?q=apple&category=fruits"。在这个例子中, "q" 是参数名,"apple" 是它的值;"category" 是另一个参数名,"fruits" 是它的值。这个查询字符串告诉服务器要执行一个搜索操作,搜索关键词是 "apple",并限定在 "fruits" 这个类别下。 + +在网络编程或 Web 开发中,解析和处理查询字符串是非常常见的任务。在许多编程语言中,都有现成的工具库可以帮助我们解析查询字符串,提取其中的参数和值。 + +## path +在网址(URL)中,"path" 指的是指定特定网页或资源在服务器上的位置的部分。通常,这个部分包括了服务器的域名后面的第一个斜杠(/)开始的部分。例如,在以下网址中: + +https://www.example.com/products/electronics/laptops + +"/products/electronics/laptops" 就是这个URL的路径部分。这告诉服务器在哪里可以找到所请求的资源。 + +在编程中,你可以使用 URL 解析库来解析 URL,并提取其中的路径部分。在 Python 中,你可以使用 urllib.parse 库来完成这个任务。 + +## fragment +在 HTTP 网址中,片段标识符(fragment identifier)是位于 URL 的末尾,并以井号(#)开头的部分。它用于指定在网页或文档中的特定位置或锚点。 + +例如,在以下网址中: + +https://www.example.com/page.html#section-2 + +"#section-2" 就是这个网址的片段标识符部分。它告诉浏览器在加载页面后,要自动滚动到 ID 为 "section-2" 的元素处。这通常在跳转到页面内部的锚点链接中使用。 + +片段标识符通常用于 Web 页面内部的导航和定位,让用户可以直接跳转到特定的章节、段落、图像或其他元素。浏览器会根据片段标识符进行相应的滚动和定位操作。 + +需要注意的是,片段标识符不会被发送到服务器端,仅在客户端浏览器中处理和使用。因此,服务器不会根据片段标识符来返回不同的内容。它主要用于客户端的交互和导航。 \ No newline at end of file