HTTP是Web浏览器与Web服务器之间通信的标准协议,HTTP指明了客户端如何与服务器建立连接,如果从服务器请求数据,服务器如何响应请求,关闭连接。HTTP是使用TCP/IP协议进行传输数据的,也就是传输层利用TCP进行连接,进行可靠连接的。
HTTP客户端向服务器端的请求
建立连接
一般客户端与服务器端在80端口处建立一个TCP连接;
进行请求
请求的一般格式: GET /index.html HTTP/1.0
第一个字段为请求动作类型:
GET代表请求的操作,表示要求服务器返回资源的表示;
HEAD表示只需要文件的首部
PUT表示向服务器上传资源
POST主要是向服务器发送表单数据
第二个字段,标识服务器上所请求的资源的相对URL,必须要以"/"开头,Web浏览器在发送请求的时候会自动加上服务器的主机名。
第三个字段,客户端理解的协议版本;
每一个HTTP请求不管是客户端还是服务器端均都要以两个回车换行结束(Java中用\r\n\r\n)
在发送HTTP请求的时候,可以附加额外的基本信息:key:value
一个常见的发送HTTP格式(一般服务器最重要的工作就是处理发送格式中的第一行数据):
GET /index.html HTTP/1.0
Accept:text/html,text/plain
User-Agent: Lyn
Host:www.server.com 这个主要就是指定服务器的名
在向服务器发送HTTP请求中如果有查询字符串,则对于POST和GET有不同的方式。
POST的动作类型主要是用于有所承诺的动作,GET动作主要用于不承担责任的动作。一般对于表单则是POST,浏览普通页面则是GET
GET发送查询字符串主要直接将查询字符串附加到URL后面,如下表示:
GET /index.html/username=Elliotte+Harold&email HTTP/1.0
POST发送查询字符串的基本格式如下:
GET /index.html HTTP/1.0
Accept:text/html,text/plain
User-Agent: Lyn
Host:www.server.com
username=Elliotte+Harold&email HTTP/1.0
题外(URL,主要由协议,授权机构,路径,查询字符串和片段标示符表示);
URL使用的字符必须是来自ASCII固定的子集:
大写字母A-Z 小写字母a-z 数字0-9 标点符号- _ . ! ~ * ` ( ).
对于未包含在这里面的字符,都要转换为字节,以%开头后面加上两个16进制数字
一般空格编码为+,+编码为%2
响应请求
服务器向客户端发送响应,响应一般包括以响应码开头,后面是元数据首部(MIME首部),空行,所请求文档,最后必须也要有两个回车换行。
基本响应格式如下:
HTTP/1.1 200 OK
Date:Mon 15
Server:Apache/7.0
Connection:close
Content-Type:text/html;
Content-length:107 代表文档的多少个字节,不包含首部字节数
<html>
<head><title>Hello</title>
</head>
<body>Test</body>
</html>
HTTP 1.1响应码
200-299之间的响应码表示接受、理解并接受了请求
300-399之间的响应码表示Web浏览器需要转到不同的页面,也就是重定位
400-499之间的响应码指示客户端在某些地方有错误
500-599之间的响应码表示服务器发生了错误。
常见的几个响应码如下:
HTTP/1.0 200 OK 表示响应成功
HTTP/1.0 301 Moved 重定向
HTTP/1.0 Bad Request 客户端向服务器发送的请求格式不正确
HTTP/1.0 Not Found(未找到) 最常见错误,指示服务器没有所请求的页面。
具体响应码列表请见转载的另一篇文章HTTP响应码解析
关闭连接
HTTP1.0是无记忆功能的,称为无状态协议,即如果客户端重新请求,服务器不会记忆前次的连接请求的连接或结果,当服务器响应完客户端本次连接后,就会自动断掉连接。
HTTP1.1是状态协议,它可以连接重用,它允许浏览器通过一个连接发送多个不同的请求。
本文转自 zhao_xiao_long 51CTO博客,原文链接:http://blog.51cto.com/computerdragon/1191176