饥人谷技术博客

http

2018-10-27  本文已影响7人  simon_李玉兵

网络的基础TCP/IP

阮一峰--互联网协议入门
阮一峰--HTTP协议入门

本人画的图,欢迎围观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中,所有的连接默认都是持久连接。

管线化

管线化出现后,不用等待响应亦可直接发送下一个请求。

上一篇下一篇

猜你喜欢

热点阅读