HTTP协议摘要
- HTTP协议工作在第几层,它下层使用了哪些协议?
HTTP是应用层协议,工作在第5层(TCP/IP协议族)。它的传输层使用的是TCP协议,网络层使用IP协议。
- HTTP协议是无连接的,其具体含义是什么?
HTTP协议无连接,不代表真的不建立TCP连接。它是基于TCP的,而TCP是面向连接的传输层协议,所以HTTP一定得建立TCP连接,只不过HTTP限制了每次连接只处理客户端的一个请求,响应结束即断开连接,目的是节省传输时间。
- HTTP是无状态的。
HTTP对事务的处理没有记忆能力。如果后续操作需要前面的信息,那么前面的信息也必须重传。
HTTP消息结构
分为客户端请求消息的结构和服务器响应消息的结构:
请求消息
- 请求行: 请求方法(GET/POST/PUT/DELETE/....) URL 协议版本
- 请求头部: 由多行组成,每行: 头部字段名:值。
- 请求数据: 具体的请求数据。
请求方法:
- GET:请求URL标识的资源
- POST:请求URL标识的资源,同时附加额外的数据给服务器,通常用来提交表单。
- HEAD:和GET类似,知识响应中不必真的回复具体的内容,用于获取报头。
- PUT: 请求服务器存储一个资源,并用URL标识该资源。
- DELETE:请求服务器删除URL标识的资源。
- 其它:TRACE/OPTIONS 不是很常用,用时自查。
请求头部:
- Accpt-Charset: 客户端指定自己能接收什么字符集。
- Accept-Encoding:接受什么编码。
- Authorization:如果服务器返回401(未授权时),可以添加该字段认证自己有权限
- ....
响应消息
- 状态行: 号码(200/404/503/.......)
- 消息报头:后面详解
- 响应正文:通常是html文件。
响应头部
- Allow:服务器支持哪些请求方法:GET?POST?..
- Content-Encoding: 文档的编码方法。
- Content-Length:内容长度,只有当浏览器使用持久HTTP连接时才需要这个数据。
- Content-Type: 响应正文术语什么MIME类型,text/html? 等等。。。
- Date: 当前GMT时间。
- Refresh:浏览器应该在多少时间后刷新文档,以秒计。编程时,函数setHeader("Refresh","3;URL=http://another_page")可以在3秒钟后让浏览器刷新到URL指定的页面,但是这种功能是通过设置html的 META DATA来实现的,是html编写者写的。而对于Servlet, 才可以直接设置HTTP Refresh头部。
- Server:Server的名字。
- Set-Cookie:设置和页面关联的Cookie,Cookie的含义和作用后面详说。
常用状态吗的含义
- 200:正常
- 301:资源被转移
- 403:服务器拒绝你的访问。
- 404:资源不存在
- 500:服务器内部错误
- 503:服务器暂时出错了,一段时间后也许可以使用。