Http协议入门
从一个简单的例子入手
(1)启动tomcat服务器;
(2)在浏览器(这里用的Chrome)输入URL:
http://localhost:8080/myweb/index.jsp(网页事先已经建好);
(3)右键审查元素(如果是火狐,需要使用firebug插件:右键->firebug->网络);
(4)点击Network -> Headers -> view source
这时,就可以看到浏览器的请求和服务器的响应详情。
http请求
- 一个完整的HTTP请求包括:一个请求行、若干请求头、以及实体内容
GET /myweb/index.jsp HTTP/1.1 //请求行
/*
*多个请求头(多个key-value对象)
*/
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8
Cookie: JSESSIONID=27E506D9063D7F10CB3C4E1FE554E1EF
//一个空行
/*
*(可选)实体内容
*/
请求行
http协议版本:
- http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭。
- http1.1:当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。(基本都使用1.1)
请求资源:
- URL: 统一资源定位符。http://localhost:8080/myweb/index.jsp。只能定位互联网资源。是URI 的子集。
- URI: 统一资源标记符。/myweb/index.jsp。用于标记任何资源。可以是本地文件系统,局域网的资源,也可以是互联网资源。
请求方式:
常见的请求方式: GET 、 POST、 HEAD、 TRACE、 PUT、 CONNECT 、DELETE 等 。
常用的请求方式: , POST , DELETE , PUT , GET , 分别代表增删改查。
请求头
- Accept:用于告诉服务器,客户机支持的数据类型
- Accept-Charset:用于告诉服务器,客户机采用的编码格式
- Accept-Encoding:用于告诉服务器,客户机支持数据压缩格式
- Accept-Language:客户机的语言环境
- Host:客户机通过这个头告诉服务器,想访问的主机名
- If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间
- Refer:客户机通过这个头告诉服务器,它是从哪个资源访问服务器的(防盗链)
- User-Agent:客户机通过这个头告诉服务器,客户机的软件环境
- Cookie:客户机通过这个头向服务器带数据
- Connection:这个请求完了,是保持连接还是关闭
- Range:断点下载
- bytes=n1-n2,传输范围n1到n2字节
- bytes=n-,传输web资源中第n个字节以后的所有内容
- bytes=n,传输最后n个字节
- Date: 请求发出的时间
实体内容
- 只有POST提交的参数会放到实体内容中
http响应
- 同样的,一个完整的HTTP响应包括:一个响应行、若干响应头、以及实体内容
HTTP/1.1 200 OK //响应行
/*
*若干个响应头(多个key-value对象)
*/
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 953
Date: Mon, 13 Feb 2017 07:04:33 GMT
//一个空行
/*
*(可选)实体内容
*/
响应行
http协议版本:
- 同上;
状态码: 服务器处理请求的结果(状态):
状态描述:
- 响应成功:OK
- 找不到资源:Not Found
- 等等
响应头
- Location:这个头配合302状态码使用,用于告诉客户机找谁(location和302实现请求重定向)
- Server:服务器通过这个头,告诉浏览器服务器的类型
- Content-Encoding:服务器通过这个头,数据的压缩格式
(相关java知识:GZIPOutputStream,包装流/底层流) - Content-Length:服务器通过这个头,告诉浏览器回送数据的长度
- Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
- Last-Modified:服务器通过这个头,告诉浏览器当前资源的缓存时间
- Refresh:服务器通过这个头,告诉浏览器隔多长时间刷新一次
- Content-Disposition:服务器通过这个头,告诉浏览器以下载方式打开
- Transfer-Encoding:服务器通过这个头,告诉浏览器数据的传送格式
- Etag:缓存相关的头部,用于实时性要求高的系统
- Expires:服务器通过这个头,告诉浏览器把回送的资源缓存多长时间,-1或0则不缓存
- Cache-Control和Pragma:no-cache,服务器通过这两个头,也是控制浏览器不要缓存数据
- Connection:断开连接/保持连接
- Date:当前时间
- Accept-Ranges:用来说明web服务器是否支持range。支持返回bytes;不支持返回none
- Content-Range:制定了返回web资源的字节范围,格式:n1-n2/n_total