HTTP超文本传输协议(HyperText Transfer Protocol)是互联网使用最广泛的网络传输协议,它基于TCP/IP通信协议来传递数据
HTTP协议工作于服务端-客户端架构上,浏览器作为HTTP的客户端通过URL向HTTP服务端(WEB服务器)发送请求,服务器通过请求向客户端响应相应的信息
常见WEB服务器:
- Apache服务器
- IIS服务器
- Nginx服务器
HTTP默认端口为80,HTTPS端口为443
HTTP的3个重要特性
- HTTP是无连接的:无连接的含义是限制每次请求只能处理一个请求。服务器端处理完客户端的请求,并收到客户端的应答后便立即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:这意味着只要客户端和服务器端知道如何处理数据内容,任何类型的数据都可以通过HTTP发送
- HTTP是无状态的:HTTP是无状态协议,无状态是指协议对事物处理没有记忆功能,这意味着如果当前事物处理需要前面事物的信息则它必须重传,这样就会导致传输的数据量增大。
图解HTTP通信流程
HTTP消息结构
- 客户端请求消息结构
- 请求行:包括请求方法,URL,协议版本,换行符
- 请求头部:头部各个字段,换行符
- 空行:换行符
- 请求数据
// get请求实例
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
- 服务器端响应消息结构
- 状态行
- 消息报头
- 空行
- 响应正文
// 服务器响应实例
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
HTTP请求方法
- GET,请求指定的页面信息,并返回实体主体
- HEAD,类似于GET请求,返回的响应中没有具体内容,用于获取报头
- POST,向指定资源提交数据进行处理请求(表单提交,文件上传),数据被包含在请求实体(body)中
- PUT,客户端向服务器端传递的数据取代指定的文档的内容
- DELETE,请求服务器删除指定的页面
- CONNECT,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
- OPTIONS,允许客户端查看服务器的性能
- TRACE,回显服务器收到的请求,主要用哪个与测试和诊断
HTTP响应头信息
字段 | 说明 |
Allow | 服务器支持哪些请求方法 |
Content-Encoding | 文档的编码方法,只有在解码之后才可以得到Content-Type头指定的内容类型 |
Content-Length | 表示内容的长度,只有当浏览器使用持久的HTTP连接才需要这个数据 |
Content-Type | 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,通常需要设置为text/html |
Date | 表示当前的GMT(标准时间)时间,北京时间 = GMT + 8小时 |
Expires | 文档过期时间,从而不去缓存它 |
Last-Modified | 文档最后的修改时间 |
Location | 表示客户端应该去哪里获取文档,需要配合302临时重定向使用 |
Refresh | 表示浏览器应该再多少时间后刷新文档 |
Server | 服务器名字,这个值服务器端程序一般不设置 |
Set-Cookie | 设置和页面关联的cookie |
WWW-Authenticate | 客户端应该在Authentication头中提供什么类型的授权信息 |
HTTP状态码
状态码 | 说明 |
1** | 服务器收到请求,需要请求者继续执行操作 |
2** | 请求成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作完成请求 |
4** | 客户端错误 |
5** | 服务端错误 |
常见状态码 | 状态码说明解释 |
200 | 请求成功 |
301 | 永久重定向 |
302 | 临时重定向 |
303 | 临时重定向 |
304 | 所请求的资源未修改,提示客户端访问缓存资源 |
400 | 客户端请求语法错误,包括缺少字段,字段错误等 |
401 | 请求需要身份认证 |
403 | 请求被服务器拒绝 |
404 | 服务器找不到客户端的请求 |
500 | 服务器内部错误,无法完成请求 |
503 | 服务器由于超载或者系统正在维护,暂时无法处理客户端的请求 |