HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。
HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息的组成:
http请求由四部分组成:
Method Request-URI HTTP/Version CRLF
HTTP请求方法
请求方法 | 描述 |
---|---|
GET | 请求获取Request-URI所标识的资源 |
POST | 在Request-URI所标识的资源后附加新的数据 |
HEAD | 请求获取由Request-URI所标识的资源的响应消息报头 |
PUT | 请求服务器存储一个资源,并用Request-URI作为其标识 |
DELETE | 请求服务器删除Request-URI所标识的资源 |
TRACE | 请求服务器回送收到的请求信息,主要用于测试或诊断 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器 |
OPTIONS | 请求查询服务器的性能,或者查询与资源相关的选项和需求 |
URI完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头
协议/版本
Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Host、User-Agent等。
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。
http响应由四部分组成:
HTTP/Version Status-Code Reason-Phrase CRLF
协议/版本
HTTP状态码
状态码分类 | 描述 |
---|---|
1xx | 指示信息–表示请求已接收,继续处理 |
2xx | 成功–表示请求已被成功接收、理解、接受 |
3xx | 重定向–要完成请求必须进行更进一步的操作 |
4xx | 客户端错误–请求有语法错误或请求无法实现 |
5xx | 服务器端错误–服务器未能实现合法的请求 |
状态码列表 | 描述 |
---|---|
200 OK | 客户端请求成功 |
400 Bad Request | 客户端请求有语法错误,不能被服务器所理解 |
401 Unauthorized | 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden |
404 Not Found | 请求资源不存在,eg:输入了错误的URL |
500 Internal Server Error | 服务器发生不可预期的错误 |
503 Server Unavailable | 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
Location、Server、WWW-Authenticate等
响应头和响应正文之间是一个空行,这个行非常重要,它表示响应头已经结束,接下来的是响应正文。
包括普通报头、请求报头、响应报头、实体报头。
每一个报头域都是由 “名字:值” 组成,消息报头域的名字是 大小写无关 的。
Connection 报头域允许发送指定连接的选项。
Connection:keep-alive
指定连接是连续的。
Connection:close
通知服务器,在响应完成后,关闭连接。
Cache-Control 用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。
Cache-Control:no-cache
Date 普通报头域表示消息产生的日期和时间。
Host 发送请求时,该报头域是必需的。 用于指定被请求资源的主机和端口号,通常从HTTP: URL中提取出来的。
Host:www.guet.edu.cn
Host:www.guet.edu.cn: 端口号
Accept 用于指定客户端接受哪些类型的资源。
Accept:image/gif
客户端希望接受GIF图象格式。Accept:text/html
客户端希望接受html文本。Accept:*/*
客户端接受任何 MIME 类型的资源。Accept-Charset 用于指定客户端接受的字符集。
Accept-Charset:iso-8859-1,gb2312
Accept-Encoding 类似于Accept,用于指定可接受的内容编码。
Accept-Encoding:gzip.deflate
Accept-Language 类似于Accept,用于指定一种自然语言。
Accept-Language:zh-cn
Authorization 用于证明客户端有权查看某个资源。
User-Agent 允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的。
User_Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36
Location 用于重定向接收者到一个新的位置。
Server 表示服务器用来处理请求的软件信息。
Server: Apache-Coyote/1.1
Server: nginx
WWW-Authenticate 服务器对客户端的认证信息,必须被包含在401(未授权的)响应消息中。
WWW-Authenticate: Basic realm="Basic Auth Test!"
Content-Length 用于描述消息实体的传输长度。
Content-Length: 1000
Content-Encoding 表示已经被应用到实体正文的编码方式,被用作媒体类型的修饰符。
Content-Encoding: gzip
Content-Type用于指明发送给接收者的实体正文的媒体类型。
Content-Type: application/json;charset=GB18030
Transfer-Encoding 表示描述消息实体的传输编码方式
Transfer-Encoding: chunked
能够自解释报文是否传输完毕。如果有做该设置,则必须忽略 Content-Length 头部。Content-Language 描述了资源所用的自然语言
Content-Language: da
实体内容仅打算提供给丹麦的阅读者。Last-Modified 用于指示资源最后的修改日期。
Expires 用于表示消息实体过期的日期时间。
GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始。
地址中”?”之后的部分就是通过GET发送的请求数据,我们可以在地址栏中清楚的看到,各个数据之间用”&”符号隔开。显然,这种方式不适合传送私密数据。
POST方法可以允许客户端给服务器提供信息较多。
POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。