网络的基础TCP/IP
本人画的图,欢迎围观TCP/IP。转载请告知。
HTTP请求的格式
HTTP请求可以划分为四部分,在没有请求参数时,就只有三部分。
请求行:动词 路径 协议/版本 |
---|
首部:key:valuex形式 |
空格 |
实体 |
例如:打开gitbash。使用curl -X POST -d "hhh:xxx" -s -v -- "http://www.baidu.com""
的请求。
> POST / HTTP/1.1 |
---|
> Host:www.baidu.com > User-Agent: curl/7.60.0 > Accept: */* > Content-Length: 7 > Content-Type: application/x-www-form-urlencoded
|
> |
} [7 bytes data]
|
HTTP响应的格式
协议/版本号 状态码 状态解释 |
---|
首部:key:valuex形式 |
空格 |
实体 |
例如:打开gitbash。使用curl -X POST -d "hhh:xxx" -s -v -- "http://www.baidu.com""
的响应。
< HTTP/1.1 302 Found |
---|
< Connection: Keep-Alive < Content-Length: 17931 < Content-Type: text/html < Date: Wed, 24 Oct 2018 10:11:13 GMT < Etag: "54d9748e-460b" < Server: bfe/1.0.8.18
|
> |
{ [3296 bytes data]
|
首部字段
使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
首部字段太多无法显示.............
各状态码的意义
状态码告知从服务器端返回的请求结果
类别 | 原因短语 | |
---|---|---|
1xx | 信息状态码 | 接收的请求正在处理 |
2xx | 成功状态码 | 请求正常处理完毕 |
3xx | 重定向转台吗 | 需要进行附加操作以完成请求 |
4xx | 客户端错误状态码 | 服务器无法处理请求 |
5xx | 服务器错误状态码 | 服务器处理请求出错 |
200 ok
表示从客户端发来的请求在服务器端被正常的处理了
204 No Content
代表服务器接收的请求已成功处理,但在返回的响应中不含实体的主体部分。
比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新。
一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用
301 Moved Permanently
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。响应将返回新的URI,就是资源的新位置。
新的永久性的URI应当在响应的Location域中返回,即响应首部location:uri
302 Found
要求客户端执行临时重定向,就像是资源临时外出,还是会回来。新的临时性的URI应当在响应的Location域中返回。
304 Not Modified
服务器端资源未改变,可直接使用客户端未过期的缓存。
400 Bad Request
该状态码表示请求报文中存在语法错误。
403 Forbidden
该状态码表明对请求的资源的访问被服务器拒绝了。
404 Not Found
该状态码表明服务器上无法找到请求的资源。
500 Internal Server Error
该状态码表明服务器端在执行请求时发生了错误。
HTTP是不保存状态的协议
HTTP协议自身不对请求和响应之间的通信状态进行保存。协议本身并不保留之前一切的请求或响应报文的信息。
为了实现期望的保持状态功能,引入了Cookie技术(例如用户登录后的状态)
持久连接节省通信量
在HTTP1.0版本中有一个缺点,就是每次TCP连接只能发送一个请求。这在以前可能是够用的。
但当浏览一个包含多张图片、视频的网页时,每次的请求都会造成无谓的TCP连接和断开。
为了解决这个问题,HTTP/1.1和一部分HTTP/1.0想出持久连接Connection: keep-alive
。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。
在HTTP/1.1中,所有的连接默认都是持久连接。
管线化
管线化出现后,不用等待响应亦可直接发送下一个请求。
网友评论