HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP三点注意事项:
- HTTP是无连接的:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
- HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 客户端请求消息
HTTP请求
每个HTTP请求和响应都遵循相同的格式,包含请求行/状态行、消息头(Header)和消息体(Body),其中消息体是可选的。
消息头包含若干属性,但要保证一行只有一个属性,并且必须以\r\n(回车换行)结尾。 当遇到空行时,后面的数据全属于消息体。 客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下面给出了请求报文的一般格式。
------------------------------------------
请求版本 URL 协议版本 CRLF #请求行
头部字段名:值 CRLF #请求头部
···
头部字段名:值 CRLF #请求头部
CRLF #空行
请求正文 #请求数据
------------------------------------------
示例(访问百度首页):
GET / HTTP/1.1
Host: baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
DNT: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.56
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
常用请求方法
请求方法 | 描述 |
---|---|
GET | 申请获取资源 |
HEAD | 类似于GET请求,不过仅要求服务器返回的头部信息,不传递实际内容 |
POST | 向指定资源提交数据进行处理请求 |
PUT | 上传某个资源 |
DELETE | 删除某个资源 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
请求头常用属性
属性 | 描述 |
---|---|
Accept | 客户端可以接受的MIME类型 |
Accept-Encoding | 客户端可以接受的数据压缩格式 |
Accept-Charset | 客户端可以接受的字符集编码 |
Accept-Language | 客户端可以接受的语言 |
User-Agent | 客户端的一些基本信息,如使用的操作系统和浏览器的名称和版本等 |
Content-Type | 表示请求中的媒体类型信息 |
Content-Length | 表示请求消息体的长度 |
Connection | 指定是否继续保持连接 |
Host | 指定要访问的虚拟主机名和端口号 |
Cookie | 将cookie值发送给服务器 |
If-Modified-Since | 缓存资源的最后获取时间 |
HTTP响应
服务器响应消息 HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
状态行如HTTP/1.1 200 OK
:
其中,HTTP/1.1表示协议版本;200表示状态码;OK是状态说明。
常用状态码
状态码 | 状态说明 | 描述 |
---|---|---|
200 | OK | 响应请求正常 |
204 | No Content | 服务器收到的请求已经处理完毕,但不需要返回响应体 |
206 | Partial Content | 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。 |
301 | Movied Permanently | 永久性重定向 |
302 | Found | 临时性重定向。 |
303 | See Other | 该状态码表示由于请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。 |
304 | Not Modified | 该状态码表示客户端发送附带条件请求时,服务器端允许请求访问资源,但未满足条件的情况。 |
307 | Temporary Redirect | 临时重定向。307状态码并不会指定客户端要用什么样的请求方法请求重定向地址。 |
400 | Bad Request | 表示该请求报文中存在语法错误,导致服务器无法理解该请求。客户端需要修改请求的内容后再次发送请求。 |
401 | Unauthorized | 该状态码表示发送的请求需要有通过HTTP认证(Basic认证,Digest认证)的认证信息。 |
403 | Forbidden | 该状态码表明对请求资源的访问被服务器拒绝了。 |
404 | Not Found | 该状态码表明服务器上无法找到指定的资源。通常被用于服务器不想透露拒绝请求的原因,或者没有其他的响应可提供。 |
500 | Internal Server Error | 该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的BUG或某些临时的故障。 |
503 | Service Unavailable | 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。 |
响应头常用属性
属性 | 描述 |
---|---|
Location | 实现请求重定向 |
Server | 服务器的基本信息 |
Content-Encoding | 服务器发送数据时使用的压缩格式 |
Content-Language | 发送的数据所用的语言 |
Content-Type | 所发送的数据的类型 |
Content-Length | 发送数据的大小 |
Set-Cookie | 把cookie发送到客户端 |
Last-Modified | 指示资源的最后修改日期和时间 |
参考
https://www.cnblogs.com/testyao/p/6548261.html https://www.cnblogs.com/chaojiyingxiong/p/9766681.html