HTTP工作流程:
一次完整的HTTP请求事务包含以下四个环节:
- 建立起客户机和服务器连接。
- 建立连接后,客户机发送一个请求给服务器。
- 服务器收到请求给予响应信息。
- 客户端浏览器将返回的内容解析并呈现,断开连接。
HTTP协议结构
请求报文
- 报文头(只有一行)
结构:method uri version
- method
HTTP的请求方法,一共有9中,但GET和POST占了99%以上的使用频次。GET表示向特定资源发起请求,当然也能提交部分数据,不过提交的数据以明文方式出现在URL中。POST通常用于向指定资源提交数据进行处理,提交的数据被包含在请求体中,相对而言比较安全些。
- uri
用来指代请求的文件,≠URL。
- version
HTTP协议的版本,该字段有HTTP/1.0和HTTP/1.1两种。
- 请求头(多行)
在HTTP/1.1中,请求头除了Host都是可选的。包含的头五花八门,这里只介绍部分。
- Host:指定请求资源的主机和端口号。端口号默认80。
- Connection:值为keep-alive和close。keep-alive使客户端到服务器的连接持续有效,不需要每次重连,此功能为HTTP/1.1预设功能。
- Accept:浏览器可接收的MIME类型。假设为text/html表示接收服务器回发的数据类型为text/html,如果服务器无法返回这种类型,返回406错误。
- Cache-control:缓存控制,Public内容可以被任何缓存所缓存,Private内容只能被缓存到私有缓存,non-cache指所有内容都不会被缓存。
- Cookie:将存储在本地的Cookie值发送给服务器,实现无状态的HTTP协议的会话跟踪。
- Content-Length:请求消息正文长度。
另有User-Agent、Accept-Encoding、Accept-Language、Accept-Charset、Content-Type等请求头这里不一一罗列。由此可见,请求报文是告知服务器请求的内容,而请求头是为了提供服务器一些关于客户机浏览器的基本信息,包括编码、是否缓存等。
- 空行(一行)
- 可选消息体(多行)
响应报文
响应报文是服务器对请求资源的响应,通过上面提到的方式同样可以看到,同样地,数据也是以"\r\n"来分割。
- 报文头(一行)
结构:version status_code status_message
- version
描述所遵循的HTTP版本。
- status_code
状态码:指明对请求处理的状态,常见的如下。
- 200:成功。
- 301:内容已经移动。
- 400:请求不能被服务器理解。
- 403:无权访问该文件。
- 404:不能找到请求文件。
- 500:服务器内部错误。
- 501:服务器不支持请求的方法。
- 505:服务器不支持请求的版本。
- status_message
显示和状态码等价英文描述。
- 响应头(多行)
这里只罗列部分。