1. 报文
HTTP
报文是HTTP
应用程序之间发送的数据块,向Web
服务器请求一个动作。这些数据块以一些文本形式的元信息开头,描述了报文的内容及含义,后面跟着可选的数据部分。HTTP
报文在客户端、服务器和代理之间流动,一次HTTP
请求,报文会从“客户端”流到“代理”再流到“服务器”,在服务器工作完成之后,报文又会从“服务器”流到“代理”再流到“客户端”。
目前主流在用的是HTTP 1.1
版本,HTTP1.1
协议报文结构分为起始行、首部和主体。
1.1. 请求报文格式
(1) 方法
a) GET
当客户端要从服务器上读取文档,点开某个链接或者是通过浏览器上输入网址来浏览网页的时候,使用的都是GET
方法。GET
方法请求参数和对应的值附加在URL
后面,利用一个?
代表URL
的结尾以及附带参数的开始,参数用key=value
键值对的方式书写,参数和参数之间用&
符号隔开。一般GET
请求的参数的大小受限,最大不超过1024KB,由于参数明文的显示在了URL
上面,因此不太适合传递私密的数据。
b) POST
POST
方法将请求的参数封装在了HTTP
请求的请求体中,以名称/值的形式出现,可以传输大量的数据。POST
请求一般用于表单数据的提交中。
c) HEAD
HEAD
就像GET
,只不过服务端接受到HEAD
请求后只返回响应头,而不会发送响应内容。当我们需要查看某个页面的状态的时候,使用HEAD
是非常高效的,因为在传输的过程中省去了响应内容部分。
GET
产生一个数据包,POST
产生两个数据包。对于GET
请求,浏览器会把HTTP Header
和 Data
一并发出去,服务器响应200
(返回数据)。而对于POST
,浏览器先发送Header
,服务器响应100 continue
,浏览器再发送data
,服务器响应200
。
(2) URL
URL
为http://
开头的格式表明为HTTP
协议下的资源。
1.2. 响应报文格式
(1) 状态码
状态码是三位数字,描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别(“成功”、“出错”等)。
状态码类型 | 作用描述 |
---|---|
1xx | 报告(请求被接收,继续处理) |
2xx | 成功(请求被成功的接收并处理) |
3xx | 重发(要完成请求必须进行更进一步的操作) |
4xx | 客户端错误(客户端错误的协议格式或请求无法处理) |
5xx | 服务器错误(服务器无法完成有效的请求处理) |
(2) 原因短语
状态码 | 原因短语 | 中文描述 |
---|---|---|
100 | Continue | 继续 |
200 | OK | 客户端请求成功 |
400 | Bad Request | 客户端请求有语法错误,不能被服务器理解 |
401 | Unauthorized | 请求未经授权 |
403 | Forbidden | 服务器收到请求,拒绝提供服务 |
404 | Not Found | 请求资源不存在 |
500 | Internal Server Error | 内部服务器错误 |
503 | Service Unavailable | 服务器不能处理客户端请求 |
2. 请求/响应步骤
(1) 客户端连接到Web
服务器
一个HTTP
客户端,通常是浏览器,与Web
服务器的HTTP
端口(默认是80)建立一个TCP
套接字连接。
(2) 发送HTTP
请求
通过TCP
套接字,客户端向Web
服务器发送一个文本的请求报文,一个请求报文由请求行,请求头部,空行和请求体4个部分构成。
(3) 服务区接收解释请求并返回HTTP
响应
Web
解析请求,定位请求资源。服务器将资源复本写到TCP
套接字,由客户端获取。一个响应由状态行,响应头,空行和响应数据4部分组成。
(4) 释放连接TCP
连接
若Connection
模式为close
,则服务器主动关闭TCP
连接,客户端被动关闭TCP
连接,释放TCP
连接。若Connection
为keepalive
,则该连接会保持一段时间,该时间内可以持续使用该连接接收请求,做出响应。
(5) 客户端浏览器解析HTML
内容
3. 参考网址
(1) HTTP报文详解
(2) HTTP协议详解
(3) HTTP报文一些基础知识