您的位置:首页 > 理论基础 > 计算机网络

HTTP协议总结

2014-11-30 10:33 169 查看
1.0 vs 1.1:

1.0:请求到一个资源后TCP链接就断开
1.1:请求到一个资源后链接没断开,可以利用同一个链接继续请求资源

HTTP请求(Request)消息包括:

一个请求行,如:GET /java.html HTTP/1.1
若干个请求头(Request Headers)
一个空行
实体内容(请求数据/表单数据)

常用的请求头(Request Headers):

Accept:用于告诉服务器,客户机支持的数据类型
Accept-Charset:客户机采用的编码
Accept-Encoding:客户机支持的数据压缩格式
Accept-Language:客户机的语言环境。服务器可以根据这个返回不同语言的页面
Host:想访问的主机名
If-Modified-Since:告诉服务器,该资源开始存放在客户机缓存中的时间。服务器可以判断是否要发送最新页面。精确到秒。
If-None-Match:和Response头的ETag配合,指示浏览器是否使用本地缓存。
Referer:告诉服务器,它是从哪个资源来访问的。可用于防止页面被其他网站引用,或被人引用时跳转到自己的网页。
User-Agent:客户机的软件环境(浏览器和版本号等)
Cookie:向服务器发送之前从服务器获取的Cookie数据
Connection:close/Keep-Alive,告诉服务器是否断开链接
Date:请求时间

HTTP响应(Response)消息包括:

一个状态行,如:HTTP/1.1 200 OK
若干个响应头(Response Headers)
一个空行
实体内容(HTML/XML/JSON等)

常用状态码:

200:OK,请求已经成功处理完。
302:建议访问另外一个地方获取资源,同时返回一个Location指出新资源的位置
304、307:告诉客户机从本地缓存中获取资源
403:用户无访问该资源的权限
404:客户机的请求有问题(资源不存在、等)
500:服务器端出现错误

常用的响应头(Response Headers):

Location:配合302状态码,告诉客户机重新去其他地方获取资源
Server:告诉客户机服务器的类型
Content-Encoding:数据的压缩格式(需要配合Content-Length),如gzip(Java可用GZIPOutputSteam就行数据压缩)
Content-Length:回送数据的长度
Content-Language:回送数据的语言类型
Content-Type:回送数据的类型,如:text/html;charset=UTF-8、text/css、image/png
Last-Modified:资源的最后修改时间
Refresh:告诉浏览器、格多长时间刷新一次(重新请求一次),单位为“秒”。用于股票、聊天室、等。或隔一段时间后刷新到另外一个页面上。如:3;url=http://xxx.com
Content-Disposition:告诉浏览器以下载的方式打开资源,如:"attachment;filename=3.jpg"
Transfer-Encoding:告诉浏览器,数据的传送格式,如:chunked表示一块一块传送
Set-Cookie:设置cookie
ETag:根据资源的内容生成的一个标识,服务器可以根据对比两个标识判断是否通知浏览器使用本地缓存。浏览器保存该ETag并由If-None-Match Request Header发送到服务器。
Expires:告诉浏览器数据可以缓存多长时间,-1或0表示不缓存
Cache-Control:告诉浏览器要不要缓存数据,如“no-cache”
Pragma:告诉浏览器要不要缓存数据,如“no-cache”
Connection:close/Keep-Alive
Date:响应的时间
Access-Control-Allow-Origin:告诉浏览器,哪些网站可以跨域访问这个页面的信息,可以避免使用JSONP。用法:

Access-Control-Allow-Origin: http://siteA.com (允许http://siteA.com跨域使用这个response中的内容)
Access-Control-Allow-Origin: * (允许所有网站跨域使用)

Range头介绍:

请求:用于指示服务器只传送部分资源,可用于实现断点续传。有三种格式设置要传输的范围

Range: bytes=1000-2000,传输范围从1000-2000字节
Range: byte=1000-,传输第1000字节以后的所有内容
Rang: bytes=1000,传输最后1000个字节
Java代码实现:

URL url = new URL("http://xxx.com/a.txt");
HttpURLConnection conn - (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Range", "bytes=1000-");

InputStream in = conn.getInputStream();
int len = 0;
byte buffer[] = new byte[1024];
FileOutputStream out = new FileOutputStream("c:\\a.txt", true); //true表示追加在原来文件的后面
while((len=in.read(buffer))>0){
out.write(buffer, 0, len);
}
in.close();
out.close();

响应:

Accept-Ranges:说明服务器是否支持Range,如果支持则返回bytes,不支持则返回none
Content-Range:返回资源的字节范围,如:1000-3000/5000表示资源的总长度是5000,当前请求返回的范围是1000-3000.

(原创文章,转载请注明转自Clement-Xu的博客:http://blog.csdn.net/clementad/article/details/41620765
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: