【网络原理 9】HTTP协议 请求 & 响应 超详解 看这篇就够

   🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇

                                    ⭐  HTTP ⭐

🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇

今日推荐歌曲:    念旧 -—— 姜铭杨       🎵🎵


 系列文章目录

【 网络原理 1】 网络编程原理基础知识-CSDN博客

【网络原理 2】UDP 协议的报文结构和注意事项-CSDN博客

【网络原理 3】TCP协议的相关特性(三次握手,四次挥手)(万字详解)看完必懂 !-CSDN博客

【网络原理 4 】应用层中 服务器和客户端的传输-CSDN博客

【网络原理 5 】网络层中的 ” 主宰 “ IP 协议-CSDN博客

【网络原理 6 】数据链路层-CSDN博客

【网络原理 7】NAT 机制的工作流程-CSDN博客

【网络原理 8】HTTP 协议的基本格式和 fiddler 的用法-CSDN博客

【网络原理 9】HTTP协议 请求 & 响应 超详解 看这篇就够-CSDN博客

【网络原理 10】HTTPS 协议 工作过程 超细节(精心配图)-CSDN博客


目录

HTTP请求 (Request)

1. 认识URL

1.1 URL基本格式

1.2 关于 URLencode

2. 认识"⽅法"(method)

 1. GET⽅法

2.1 GET请求的特点

2. POST⽅法

GET和POST的区别

3. 认识请求"报头"(header)

4. 认识请求"正⽂"(body)

HTTP响应 (Response)

1. 认识"状态码"(statuscode)

2. 认识响应"报头"(header)

3. 认识响应"正⽂"(body)

总结


前言

接上篇文章,【网络原理 8】HTTP 协议的基本格式和 fiddler 的用法-CSDN博客,这里详细介绍HTTP 的 请求 和 响应。


HTTP请求 (Request)

HTTP(Hypertext Transfer Protocol)是一种应用层协议,用于在Web浏览器和Web服务器之间传输数据。HTTP请求和响应是HTTP协议中最基本的消息类型。

HTTP请求包含以下内容:

  1. 请求行:包括HTTP方法(GET,POST等)、请求URI和HTTP版本号;
  2. 请求头部:包括一系列关于请求的元数据,如Host、User-Agent、Accept等;
  3. 空行:请求头部和请求正文之间需要空一行;
  4. 请求正文(可选):包含请求提交的数据,如表单数据、文件等。

1. 认识URL

1.1 URL基本格式

平时我们俗称的"⽹址"其实就是说的 URL(UniformResourceLocator统⼀资源定位符) . 互联⽹上的每个⽂件都有⼀个唯⼀的URL,它包含的信息指出⽂件的位置以及浏览器应该怎么处理它. URL的详细规则由因特⽹标准RFC1738进⾏了约定.RFC 1738 - Uniform Resource Locators (URL)

⼀个具体的URL:

 https://v.bitedu.vip/personInf/student?userId=10000&classId=100

可以看到,在这个URL中有些信息被省略了.

  • https:协议方案名. 常见的有http和https,也有其他的类型.(例如访问mysql时用的jdbc :mysql))
  • user:pass: 登陆信息.现在的网站进行身份认证一般不再通过URL进行了.一般都会省略
  • v.bitedu.vip : 服务器地址.此处是一个"域名",域名会通过DNS系统解析成一个具体的IP地址.(通过ping 命令可以看到, v.bitedu.vip的真实IP地址为118.24.113.28 )
  • 端口号 : 上面的URL中端口号被省略了.当端口号省略的时候,浏览器会根据协议类型自动决定使用哪个端口.例如 http 协议默认使用80端口, https 协议默认使用443端口.
  • / personInf /student:带层次的文件路径.
  • userId=10000&classId=100:查询字符串(query string). 本质是一个键值对结构.键值对之间使用&分隔.键和值之间使用=分隔.
  • 片段标识: 此URL中省略了片段标识.片段标识主要用于页面内跳转.(例如Vue官方文档: https://cn.vuejs.org/v2/guide/#%E8%B5%B7%E6%AD%A5,通过不同的片段标识跳转到文档的不同章节)

使⽤ping命令查看域名对应的IP地址.如下图:

PS: 有的电脑上ping命令会报错 ping 不是内部或外部命令,也不是可运⾏的程序或批处理⽂件 . 这种情况是因为有的Windows10默认没有启⽤ping命令. 百度搜索 windows10 启⽤ ping 即可.

关于 querystring 

query string 中的内容是键值对结构.其中的key和value的取值和个数,完全都是程序猿⾃⼰约定 的.我们可以通过这样的⽅式来⾃定制传输我们需要的信息给服务器.

URL中的可省略部分

• 协议名:可以省略,省略后默认为http://

• ip地址/域名:在HTML中可以省略(⽐如img,link,script,a标签的src或者href属性).省略后表 ⽰服务器的ip/域名与当前HTML所属的ip/域名⼀致.

• 端⼝号:可以省略.省略后如果是http协议,端⼝号⾃动设为80;如果是https协议,端⼝号⾃动设为 443.

• 带层次的⽂件路径:可以省略.省略后相当于/.有些服务器会在发现/路径的时候⾃动访问 /index.html

• 查询字符串:可以省略

• ⽚段标识:可以省略

所以可以只有服务器地址就可以访问了。

1.2 关于 URLencode

像/?:等这样的字符,已经被url当做特殊意义理解了.因此这些字符不能随意出现.

⽐如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进⾏转义.

⼀个中⽂字符由UTF-8或者GBK这样的编码⽅式构成,虽然在URL中没有特殊含义,但是仍然需要进 ⾏转义.否则浏览器可能把UTF-8/GBK编码中的某个字节当做URL中的特殊符号

转义的规则如下:

将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做 ⼀位,前⾯加上%,编码成%XY格式

例如:

" = " 被转义成了" %3D "    urldecode 就是 urlencode 的逆过程;


2. 认识"⽅法"(method)

 1. GET⽅法

GET是最常⽤的HTTP⽅法.常⽤于获取服务器上的某个资源. 在浏览器中直接输⼊URL,此时浏览器就会发送出⼀个GET请求.

另外,HTML中的link,img,script等标签,也会触发GET请求. 使⽤JavaScript中的ajax也能构造GET请求.

使⽤Fiddler观察GET请求

打开Fiddler,访问搜狗主⻚,观察抓包结果

箭头指向的就是通过浏览器地址栏发送的GET请求,下⾯的和 sogou 域名相关的请求,有些是通过html中的link/script/img标签产⽣的,例如

有些是通过ajax的⽅式产⽣的,例如

选中 GET请求 观察请求的详细结果

1 GET https: / / www . sogou.com/ HTTP/1.1

2 Host: www . sogou. com
3 Connection: keep-alive

4 Cache-Control: max-age=0
5 sec-ch-ua: " Not;A Brand" ;v="99","Google Chrome" ;v="91", "Chromium" ; v="91"

6 sec-ch-ua-mobile: ?0
7 Upgrade-Insecure-Requests: 1
8 User-Agent: Mozilla/5.0 (windows NT 10.0; win64; x64) ApplewebKit/537.36(KHTML,

9 Accept: text/html,application/xhtml+xml,application/xml; q=0.9,image/avif, image/w

10 Sec-Fetch-Site: none
11 Sec-Fetch-Mode: navigate12 Sec-Fetch-User: ?1
13 Sec-Fetch-Dest: document
14 Accept-Encoding: gzip,deflate,br
15  Accept-Language: zh-CN ,zh;q=0.9,en;q=0.8
16 Cookie:

SUID=19AA8B7B6E1CAOOA000000005F9A2F76;SUV=1603940214073598;pgv_pvi=266

2.1 GET请求的特点

• ⾸⾏的第⼀部分为GET

• URL的 querystring 可以为空,也可以不为空.

• header部分有若⼲个键值对结构.

• body部分为空.

关于GET请求的URL长度问题
网上有些资料上描述: get请求长度最多1024kb这样的说法是错误的.
HTTP协议由RFC2616标准定义,标准原文中明确说明: "Hypertext Transfer Protocol-HTTP/1.1,"does not specify any requirement for URL length.
没有对URL的长度有任何的限制.
实际URL的长度取决于浏览器的实现和HTTP服务器端的实现.在浏览器端, 不同的浏览器最大长度是不同的, 但是现代浏览器支持的长度一般都很长;在服务器端, 一般这个长度是可以配置的.


2. POST⽅法

POST⽅法也是⼀种常⻅的⽅法.多⽤于提交⽤⼾输⼊的数据给服务器(例如登陆⻚⾯). 

通过HTML中的form标签可以构造POST请求,或者使⽤JavaScript的ajax也可以构造POST请求.

使⽤Fiddler观察POST⽅法

在登陆⻚⾯,输⼊⽤⼾名,密码,验证码之后,点击登陆,就可以看到POST请求.

POST请求的特点

• ⾸⾏的第⼀部分为POST

• URL的querystring⼀般为空(也可以不为空)

• header部分有若⼲个键值对结构.

• body部分⼀般不为空.body 内的数据格式通过 header 中的 由header中的 Content-Length 指定. 

        

GET和POST的区别

经典⾯试题

• 语义不同:GET⼀般⽤于获取数据,POST⼀般⽤于提交数据. Content-Type 指定.body的⻓度

• GET的body⼀般为空,需要传递的数据通过querystring传递,POST的querystring⼀般为空,需 要传递的数据通过body传递

• GET请求⼀般是幂等的,POST请求⼀般是不幂等的.(如果多次请求得到的结果⼀样,就视为请求是 幂等的).

• GET可以被缓存,POST不能被缓存.(这⼀点也是承接幂等性).

补充说明:

关于语义:GET完全可以⽤于提交数据,POST也完全可以⽤于获取数据.

关于幂等性: 标准建议GET实现为幂等的.实际开发中GET也不必完全遵守这个规则(主流⽹站都有 "猜你喜欢"功能,会根据⽤⼾的历史⾏为实时更新现有的结果.

关于安全性: 有些资料上说"POST⽐GET请安全".这样的说法是不科学的.是否安全取决于前端在 传输密码等敏感信息时是否进⾏加密,和GETPOST⽆关.

关于传输数据量: 有的资料上说"GET传输的数据量⼩,POST传输数据量⼤".这个也是不科学的,标 准没有规定GET的URL的⻓度,也没有规定POST的body的⻓度.传输数据量多少,完全取决于不 同浏览器和不同服务器之间的实现区别.

关于传输数据类型: 有的资料上说"GET只能传输⽂本数据,POST可以传输⼆进制数据".这个也是 不科学的.GET的querystring虽然⽆法直接传输⼆进制数据,但是可以针对⼆进制数据进⾏url encode.

任何⼀个能进⾏⽹络编程的语⾔都可以构造HTTP请求.本质上就是通过TCPsocket写⼊⼀个符合 HTTP协议规则的字符串.


3. 认识请求"报头"(header)

header 的整体的格式也是"键值对"结构. 每个键值对占⼀⾏.

键和值之间使⽤分号分割. 报头的种类有很多,此处仅介绍⼏个常⻅的.

Host : 表⽰服务器主机的地址和端⼝.

Content-Length :表⽰body中的数据⻓度.

Content-Type :表⽰请求的body中的数据格式(图片,视频,文本...).

  • text/html:表示响应正文是HTML格式的文本,通常用于网页内容的展示。
  • text/css:表示响应正文是CSS格式的文本,通常用于网页样式的设置和控制。
  • application/javascript:表示响应正文是JavaScript格式的文本,通常用于网页动态效果、事件处理等脚本编程。
  • application/json:表示响应正文是JSON格式的文本,通常用于数据传输、交换等。

MIME types (IANA media types) - HTTP | MDN

User-Agent (简称UA)

表⽰浏览器/操作系统的属性.形如

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)

其中 Windows NT 10.0; Win64; x64 表⽰操作系统信息

AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 表⽰浏览器信息.

Referer

表⽰这个⻚⾯是从哪个⻚⾯跳转过来的.形如

https://v.bitedu.vip/login

如果直接在浏览器中输⼊URL,或者直接通过收藏夹访问⻚⾯时是没有Referer的.

Cookie

Cookie是一种在客户端(通常是Web浏览器)和服务器之间传递的小型数据片段,它存储在用户的计算机上,并由浏览器在之后的请求中发送到同一服务器。Cookie通常用于跟踪用户的会话信息、记录用户的偏好设置、实现购物车功能等。

Cookie由服务器发送到客户端的HTTP响应头部中,其中包含了一些关键信息,比如Cookie的名称、值、过期时间、作用域等。一旦存储在客户端,Cookie会在每次与同一服务器的通信中被发送到服务器,以便服务器可以识别用户并提供个性化的服务。

Cookie可以分为两种类型:

  1. 会话Cookie:这种Cookie存储在用户计算机的内存中,并且在用户关闭浏览器时被删除。会话Cookie通常用于存储临时数据,比如用户的会话标识符,以便服务器在用户浏览网站期间识别用户。

  2. 持久Cookie:这种Cookie存储在用户计算机的硬盘上,并且可以在多次会话之间保留。持久Cookie通常具有过期时间,在过期之前会一直存在于用户计算机上。持久Cookie常用于存储用户的偏好设置、登录凭证等长期有效的信息。

尽管Cookie在提供个性化服务和跟踪用户行为方面具有很大的用处,但也存在一些隐私和安全方面的问题。比如,Cookie可能被用于跟踪用户的浏览历史,并且可能被恶意利用来窃取用户的个人信息。因此,许多浏览器都提供了对Cookie的管理功能,用户可以选择是否接受Cookie,以及在什么情况下接受。

Cookie 一般用于记录⽤⼾当前登陆的⾝份标识.也称为"令牌(token)"

理解登陆过程

4. 认识请求"正⽂"(body)

正⽂中的内容格式和header中的Content-Type密切相关.

HTTP请求中的"正文"(body)是指在HTTP请求中发送的数据部分。在HTTP请求中,正文通常用于传输一些数据,比如表单数据、JSON数据、XML数据等。正文是可选的,因为并非所有的HTTP请求都需要在正文中发送数据。

正文部分通常出现在POST请求和PUT请求中,而GET请求通常不包含正文,因为GET请求是通过URL传递参数的。在POST请求和PUT请求中,正文通常是以键值对的形式发送数据,也可以是JSON格式、XML格式等。

例如,在一个POST请求中,如果用户提交了一个表单,表单中包含了用户名和密码,那么这些数据就可以放在请求的正文中,以键值对的形式发送到服务器。服务器在接收到这个请求后,就可以从正文中提取出用户名和密码,进行相应的处理。

总之,HTTP请求中的正文部分用于传输一些数据,这些数据可以是各种格式的,根据请求的需要来决定。


HTTP响应 (Response)

HTTP响应包含以下内容:

  1. 状态行:包括HTTP版本、响应状态码和对应的状态消息;
  2. 响应头部:包括一系列关于响应的元数据,如Content-Type、Content-Length、Server等;
  3. 空行:响应头部和响应正文之间需要空一行;
  4. 响应正文:包含响应的数据,如HTML、XML、JSON等文档格式、图片、音频、视频等二进制数据等等。

1. 认识"状态码"(statuscode)

状态码(status code)是在HTTP协议中用于表示服务器对客户端请求的处理结果的数字代码。通过状态码,客户端可以了解到请求的处理结果,如访问是否成功、是否需要重定向、是否存在错误等。

以下是常见的HTTP状态码及其含义:

  1. 1xx:信息性响应

    • 100:继续(Continue)- 表示服务器接收到请求,客户端可以继续发送请求的剩余部分。
    • 101:切换协议(Switching Protocols)- 表示服务器正在切换协议,例如从HTTP切换到WebSocket。
  2. 2xx:成功响应

    • 200:成功(OK)- 表示请求已成功处理,并返回相应的内容。
    • 201:已创建(Created)- 表示请求已成功处理,并在服务器上创建了新的资源。
    • 204:无内容(No Content)- 表示请求已成功处理,但没有返回任何内容。
  3. 3xx:重定向

    • 301:永久重定向(Moved Permanently)- 请求的资源已永久移动到新位置。
    • 302:临时重定向(Found)- 请求的资源临时移动到其他位置。
    • 304:未修改(Not Modified)- 表示客户端的缓存资源仍有效,可以直接使用缓存的内容。
  4. 4xx:客户端错误

    • 400:错误请求(Bad Request)- 请求无效或不可理解。
    • 401:未授权(Unauthorized)- 请求需要身份验证。
    • 403 :不可访问(Forbidden)表⽰访问被拒绝.有的⻚⾯通常需要⽤⼾具有⼀定的权限才能访问(登陆后才能访问).如果⽤⼾没有登陆 直接访问,就容易⻅到403.
    • 404:未找到(Not Found)- 请求的资源不存在。
  5. 5xx:服务器错误

    • 500:服务器内部错误(Internal Server Error)- 服务器遇到了意外情况,无法完成请求。
    • 503:服务不可用(Service Unavailable)- 服务器暂时无法处理请求,通常是因为过载或维护。
    • 504:超时(GatewayTimeout) 当服务器负载⽐较⼤的时候,服务器处理单条请求的时候消耗的时间就会很⻓,就可能会导致出现超时 的情况.

以上只是一些常见的HTTP状态码,实际上HTTP协议定义了更多的状态码用于表示不同的情况。状态码对于调试和排查问题非常有帮助,客户端可以根据状态码来适当地处理响应结果。


2. 认识响应"报头"(header)

响应报头的基本格式和请求报头的格式基本⼀致.

类似于 Content-Type , Content-Length 等属性的含义也和请求中的含义⼀致.

Content-Type:

响应中的Content-Type常⻅取值有以下⼏种:

  • text/html:表示响应正文是HTML格式的文本,通常用于网页内容的展示。
  • text/css:表示响应正文是CSS格式的文本,通常用于网页样式的设置和控制。
  • application/javascript:表示响应正文是JavaScript格式的文本,通常用于网页动态效果、事件处理等脚本编程。
  • application/json:表示响应正文是JSON格式的文本,通常用于数据传输、交换等。

3. 认识响应"正⽂"(body)

正⽂的具体格式取决于Content-Type.

HTTP响应的"正文"(body)是指服务器返回给客户端的实际数据内容。正文通常包含了请求所需要的信息,如HTML、XML、JSON等文档格式、图片、音频、视频等二进制数据等等。

在HTTP响应中,正文通常跟随在响应头部分的后面,使用空行来分隔。响应头部分包含了HTTP协议版本、状态码、响应头字段等元数据信息,而正文则包含了具体的数据内容。例如,一个HTTP响应的格式通常如下所示:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234

<!DOCTYPE html>
<html>
<head>
	<title>Example Website</title>
	<meta charset="utf-8">
</head>
<body>
	<h1>Welcome to Example Website!</h1>
	<p>This is an example website.</p>
</body>
</html>

上述例子中,响应头部分包含了HTTP协议版本、状态码和Content-Type等元数据信息,而正文部分则是一个HTML文档,包含了网页的标题、编码方式以及页面的内容等信息。

在对HTTP响应进行解析时,客户端需要读取并处理响应的正文部分,以获取服务器返回的具体数据内容。具体的处理方法依赖于正文的类型和格式,通常可以使用相应的解析库或者工具来处理。例如,在读取HTML文档时,可以使用浏览器或者其他HTML解析器来解析HTML文件,并将其中的内容渲染到用户界面上。


总结

HTTP(Hypertext Transfer Protocol)是一种应用层协议,用于在Web浏览器和Web服务器之间传输数据。HTTP请求和响应是HTTP协议中最基本的消息类型。

HTTP请求包含以下内容:

  1. 请求行:包括HTTP方法(GET,POST等)、请求URI和HTTP版本号;
  2. 请求头部:包括一系列关于请求的元数据,如Host、User-Agent、Accept等;
  3. 空行:请求头部和请求正文之间需要空一行;
  4. 请求正文(可选):包含请求提交的数据,如表单数据、文件等。

HTTP响应包含以下内容:

  1. 状态行:包括HTTP版本、响应状态码和对应的状态消息;
  2. 响应头部:包括一系列关于响应的元数据,如Content-Type、Content-Length、Server等;
  3. 空行:响应头部和响应正文之间需要空一行;
  4. 响应正文:包含响应的数据,如HTML、XML、JSON等文档格式、图片、音频、视频等二进制数据等等。

HTTP请求和响应之间通过网络传输,使用TCP/IP协议来传输数据。HTTP是无状态的协议,也就是每个HTTP请求都是独立的,与之前或之后的请求没有关联。为了实现状态保持,HTTP引入了cookie和session等机制来帮助Web应用程序管理客户端的状态信息。

总之,HTTP请求和响应是HTTP协议中最基本的消息类型,它们用于在Web浏览器和Web服务器之间传输数据,是Web应用程序的基石。

以上就是本文的所有内容,肝到凌晨 2 点,呼呼,辛苦自己了。

博客不易,希望可以帮助到大伙,动动小手点个赞我会开心很久,感谢阅览。

  • 41
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 译者序 前言 第1章  概述 1.1  引言 1.2  分层 1.3  TCP/IP的分层 1.4  互联网的地址 1.5  域名系统 1.6  封装 1.7  分用 1.8  客户-服务器模型 1.9  端口号 1.10  标准化过程 1.11  RFC 1.12  标准的简单服务 1.13  互联网 1.14  实现 1.15  应用编程接口 1.16  测试网络 1.17  小结 第2章  链路层 2.1  引言 2.2  以太网和IEEE 802封装 2.3  尾部封装 2.4  SLIP:串行线路IP 2.5  压缩的SLIP 2.6  PPP:点对点协议 2.7  环回接口 2.8  最大传输单元MTU 2.9  路径MTU 2.10  串行线路吞吐量计算 2.11  小结 第3章  IP:网际协议 3.1  引言 3.2  IP首部 3.3  IP路由选择 3.4  子网寻址 3.5  子网掩码 3.6  特殊情况的IP地址 3.7  一个子网的例子 3.8  ifconfig命令 3.9  netstat命令 3.10  IP的未来 3.11  小结 第4章  ARP:地址解析协议 4.1  引言 4.2  一个例子 4.3  ARP高速缓存 4.4  ARP的分组格式 4.5  ARP举例 4.5.1  一般的例子 4.5.2  对不存在主机的ARP请求 4.5.3  ARP高速缓存时设置 4.6  ARP代理 4.7  免费ARP 4.8  arp命令 4.9  小结 第5章  RARP:逆地址解析协议 5.1  引言 5.2  RARP的分组格式 5.3  RARP举例 5.4  RARP服务器的设计 5.4.1  作为用户进程的RARP服务器 5.4.2  每个网络有多个RARP服务器 5.5  小结 第6章  ICMP:Internet控制报文协议 6.1  引言 6.2  ICMP报文的类型 6.3  ICMP地址掩码请求与应答 6.4  ICMP时间戳请求与应答 6.4.1  举例 6.4.2  另一种方法 6.5  ICMP端口不可达差错 6.6  ICMP报文的4.4BSD处理 6.7  小结 第7章  Ping程序 7.1  引言 7.2  Ping程序 7.2.1  LAN输出 7.2.2  WAN输出 7.2.3  线路SLIP链接 7.2.4  拨号SLIP链路 7.3  IP记录路由选项 7.3.1  通常的例子 7.3.2  异常的输出 7.4  IP时间戳选项 7.5  小结 第8章  Traceroute程序 8.1  引言 8.2  Traceroute 程序的操作 8.3  局域网输出 8.4  广域网输出 8.5  IP源站选路选项 8.5.1  宽松的源站选路的traceroute 程序示例 8.5.2  严格的源站选路的traceroute 程序示例 8.5.3  宽松的源站选路traceroute程序 的往返路由 8.6  小结 第9章  IP选路 9.1  引言 9.2  选路的原理 9.2.1  简单路由表 9.2.2  初始化路由表 9.2.3  较复杂的路由表 9.2.4  没有到达目的地的路由 9.3  ICMP主机与网络不可达差错 9.4  转发或不转发 9.5  ICMP重定向差错 9.5.1  一个例子 9.5.2  更多的细节 9.6  ICMP路由器发现报文 9.6.1  路由器操作 9.6.2  主机操作 9.6.3  实现 9.7  小结 第10章  动态选路协议 10.1  引言 10.2  动态选路 10.3  Unix选路守护程序 10.4  RIP:选路信息协议 10.4.1  报文格式 10.4.2  正常运行 10.4.3  度量 10.4.4  问题 10.4.5  举例 10.4.6  另一个例子 10.5  RIP版本2 10.6  OSPF:开放最短路径优先 10.7  BGP:边界网关协议 10.8  CIDR:无类型域间选路 10.9  小结 第11章  UDP:用户数据报协议 11.1  引言 11.2  UDP首部 11.3  UDP检验和 11.3.1  tcpdump输出 11.3.2  一些统计结果 11.4  一个简单的例子 11.5  IP分片 11.6  ICMP不可达差错(需要分片) 11.7  用Traceroute确定路径MTU 11.8  采用UDP的路径MTU发现 11.9  UDP和ARP之间的交互作用 11.10  最大UDP数据报长度 11.11  ICMP源站抑制差错 11.12  UDP服务器的设计 11.12.1  客户IP地址及端口号 11.12.2  目标IP地址 11.12.3  UDP输入队列 11.12.4  限制本地IP地址 11.12.5  限制远端IP地址 11.12.6  每个端口有多个接收者 11.13  小结 第12章  广播和多播 12.1  引言 12.2  广播 12.2.1  受限的广播 12.2.2  指向网络的广播 12.2.3  指向子网的广播 12.2.4  指向所有子网的广播 12.3  广播的例子 12.4  多播 12.4.1  多播组地址 12.4.2  多播组地址到以太网地址的转换 12.4.3  FDDI和令牌环网络中的多播 12.5  小结 第13章  IGMP:Internet组管理协议 13.1  引言 13.2  IGMP报文 13.3  IGMP协议 13.3.1  加入一个多播组 13.3.2  IGMP报告和查询 13.3.3  实现细节 13.3.4  生存时间字段 13.3.5  所有主机组 13.4  一个例子 13.5  小结 第14章  DNS:域名系统 14.1  引言 14.2  DNS基础 14.3  DNS的报文格式 14.3.1  DNS查询报文中的问题部分 14.3.2  DNS响应报文中的资源记录部分 14.4  一个简单的例子 14.5  指针查询 14.5.1  举例 14.5.2  主机名检查 14.6  资源记录 14.7  高速缓存 14.8  用UDP还是用TCP 14.9  另一个例子 14.10  小结 第15章  TFTP:简单文件传送协议 15.1  引言 15.2  协议 15.3  一个例子 15.4  安全性 15.5  小结 第16章  BOOTP: 引导程序协议 16.1  引言 16.2  BOOTP的分组格式 16.3  一个例子 16.4  BOOTP服务器的设计 16.5  BOOTP穿越路由器 16.6  特定厂商信息 16.7  小结 第17章  TCP:传输控制协议 17.1  引言 17.2  TCP的服务 17.3  TCP的首部 17.4  小结 第18章  TCP连接的建立与终止 18.1  引言 18.2  连接的建立与终止 18.2.1  tcpdump的输出 18.2.2  时间系列 18.2.3  建立连接协议 18.2.4  连接终止协议 18.2.5  正常的tcpdump输出 18.3  连接建立的时 18.3.1  第一次时时间 18.3.2  服务类型字段 18.4  最大报文段长度 18.5  TCP的半关闭 18.6  TCP的状态变迁图 18.6.1  2MSL等待状态 18.6.2  平静时间的概念 18.6.3  FIN_WAIT_2状态 18.7  复位报文段 18.7.1  到不存在的端口的连接请求 18.7.2  异常终止一个连接 18.7.3  检测半打开连接 18.8  同时打开 18.9  同时关闭 18.10  TCP选项 18.11  TCP服务器的设计 18.11.1  TCP服务器端口号 18.11.2  限定的本地IP地址 18.11.3  限定的远端IP地址 18.11.4  呼入连接请求队列 18.12  小结 第19章  TCP的交互数据流 19.1  引言 19.2  交互式输入 19.3  经受时延的确认 19.4  Nagle算法 19.4.1  关闭Nagle算法 19.4.2  一个例子 19.5  窗口大小通告 19.6  小结 第20章  TCP的成块数据流 20.1  引言 20.2  正常数据流 20.3  滑动窗口 20.4  窗口大小 20.5  PUSH标志 20.6  慢启动 20.7  成块数据的吞吐量 20.7.1  带宽时延乘积 20.7.2  拥塞 20.8  紧急方式 20.9  小结 第21章  TCP的时与重传 21.1  引言 21.2  时与重传的简单例子 21.3  往返时间测量 21.4  往返时间RTT的例子 21.4.1  往返时间RTT的测量 21.4.2  RTT估计器的计算 21.4.3  慢启动 21.5  拥塞举例 21.6  拥塞避免算法 21.7  快速重传与快速恢复算法 21.8  拥塞举例(续) 21.9  按每条路由进行度量 21.10  ICMP的差错 21.11  重新分组 21.12  小结 第22章  TCP的坚持定时器 22.1  引言 22.2  一个例子 22.3  糊涂窗口综合症 22.4  小结 第23章  TCP的保活定时器 23.1  引言 23.2  描述 23.3  保活举例 23.3.1  另一端崩溃 23.3.2  另一端崩溃并重新启动 23.3.3  另一端不可达 23.4  小结 第24章  TCP的未来和性能 24.1  引言 24.2  路径MTU发现 24.2.1  一个例子 24.2.2  大分组还是小分组 24.3  长肥管道 24.4  窗口扩大选项 24.5  时间戳选项 24.6  PAWS:防止回绕的序号 24.7  T/TCP:为事务用的TCP扩展 24.8  TCP的性能 24.9  小结 第25章  SNMP:简单网络管理协议 25.1  引言 25.2  协议 25.3  管理信息结构 25.4  对象标识符 25.5  管理信息库介绍 25.6  实例标识 25.6.1  简单变量 25.6.2  表格 25.6.3  字典式排序 25.7  一些简单的例子 25.7.1  简单变量 25.7.2  get-next操作 25.7.3  表格的访问 25.8  管理信息库(续) 25.8.1  system组 25.8.2  interface组 25.8.3  at组 25.8.4  ip组 25.8.5  icmp组 25.8.6  tcp组 25.9  其他一些例子 25.9.1  接口MTU 25.9.2  路由表 25.10  trap 25.11  ASN.1和BER 25.12  SNMPv2 25.13  小结 第26章  Telnet和Rlogin:远程登录 26.1  引言 26.2  Rlogin协议 26.2.1  应用进程的启动 26.2.2  流量控制 26.2.3  客户的中断键 26.2.4  窗口大小的改变 26.2.5  服务器到客户的命令 26.2.6  客户到服务器的命令 26.2.7  客户的转义符 26.3  Rlogin的例子 26.3.1  初始的客户-服务器协议 26.3.2  客户中断键 26.4  Telnet协议 26.4.1  NVT ASCII 26.4.2  Telnet命令 26.4.3  选项协商 26.4.4  子选项协商 26.4.5  半双工、一次一字符、一次 一行或行方式 26.4.6  同步信号 26.4.7  客户的转义符 26.5  Telnet举例 26.5.1  单字符方式 26.5.2  行方式 26.5.3  一次一行方式(准行方式) 26.5.4  行方式:客户中断键 26.6  小结 第27章  FTP:文件传送协议 27.1  引言 27.2  FTP协议 27.2.1  数据表示 27.2.2  FTP命令 27.2.3  FTP应答 27.2.4  连接管理 27.3  FTP的例子 27.3.1  连接管理:临时数据端口 27.3.2  连接管理:默认数据端口 27.3.3  文本文件传输:NVT ASCII 表示还是图像表示 27.3.4  异常中止一个文件的传输: Telnet同步信号 27.3.5  匿名FTP 27.3.6  来自一个未知IP地址的匿名FTP 27.4  小结 第28章  SMTP:简单邮件传送协议 28.1  引言 28.2  SMTP协议 28.2.1  简单例子 28.2.2  SMTP命令 28.2.3  信封、首部和正文 28.2.4  中继代理 28.2.5  NVT ASCII 28.2.6  重试间隔 28.3  SMTP的例子 28.3.1  MX记录:主机非直接连到 Internet 28.3.2  MX记录:主机出故障 28.3.3  VRFY和EXPN命令 28.4  SMTP的未来 28.4.1  信封的变化:扩充的SMTP 28.4.2  首部变化:非ASCII字符 28.4.3  正文变化:通用Internet邮件 扩充 28.5  小结 第29章  网络文件系统 29.1  引言 29.2  Sun远程过程调用 29.3  XDR:外部数据表示 29.4  端口映射器 29.5  NFS协议 29.5.1  文件句柄 29.5.2  安装协议 29.5.3  NFS过程 29.5.4  UDP还是TCP 29.5.5  TCP上的NFS 29.6  NFS实例 29.6.1  简单的例子:读一个文件 29.6.2  简单的例子:创建一个目录 29.6.3  无状态 29.6.4  例子:服务器崩溃 29.6.5  等幂过程 29.7  第3版的NFS 29.8  小结 第30章  其他的TCP/IP应用程序 30.1  引言 30.2  Finger协议 30.3  Whois协议 30.4  Archie、WAIS、Gopher、Veronica 和WWW 30.4.1  Archie 30.4.2  WAIS 30.4.3  Gopher 30.4.4  Veronica 30.4.5  万维网WWW 30.5  X窗口系统 30.5.1  Xscope程序 30.5.2  LBX: 低带宽X 30.6  小结 附录A  tcpdump程序 附录B  计算机时钟 附录C  sock程序 附录D  部分习题的解答 附录E  配置选项 附录F  可以免费获得的源代码 参考文献 缩略语
HTTP(HyperText Transfer Protocol)是一种用于传输文本(例如HTML)的协议。它是Web应用程序的基础,也是Internet上最常用的协议之一。下面是HTTP协议详解HTTP特点: 1. 简单快速:HTTP协议作为一种通信协议,它的设计是简单的,使得它快速、高效。 2. 灵活:HTTP协议允许客户端和服务器之间传输任何类型的数据,包括文本、图像、音频、视频等。 3. 无状态:HTTP协议是一种无状态协议,这意味着服务器不会保留任何客户端的请求信息,每个请求都是独立的。 4. 可扩展:HTTP协议是一种可扩展的协议,可以通过添加新的方法、头部或状态码来扩展。 URL: URL(Uniform Resource Locator)是一种用于定位Web上资源的地址。它由协议、主机名、端口号、路径和查询组成。例如,http://www.example.com/index.html是一个URL,其中http是协议、www.example.com是主机名、80是端口号(默认为80)、index.html是路径。 HTTP请求详细: HTTP请求请求行、请求头部和请求正文组成。请求行包括请求方法、URL和HTTP协议版本。请求头部包括一系列的头部字段,用于描述客户端或请求正文的信息。请求正文包含请求的数据。 HTTP响应详细: HTTP响应由状态行、响应头部和响应正文组成。状态行包括HTTP协议版本、状态码和状态码的原因短语。响应头部包括一系列的头部字段,用于描述服务器或响应正文的信息。响应正文包含响应的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值