HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。
HTTPS是在HTTP基础上加了SSL,以安全为目标的HTTP通道,简单讲是HTTP的安全版。
HTTP报文分为请求报文和响应报文,都由请求(响应)行、请求(响应)头和请求(响应)请求正文组成。
HTTP请求报文
当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:
请求行:包含了请求方法 URI协议/版本
请求头(Request Header) :请求头包含许多有关的客户端环境和请求正文的有用信息
请求正文
下面是一个HTTP请求的例子:
GET/sample.jspHTTP/1.1 ---------------------------------请求行
Accept:image/gif.image/jpeg,*/* --------
Accept-Language:zh-cn
Connection:Keep-Alive 请求头
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate --------
username=jinqiao&password=1234 -----------------------------请求正文
上面这个例子是get方法的请求报文,get请求也是HTTP默认的请求方法,但其实请求方式有很多种,比如post 、delete 、put等,但是我们常用的也就只有get方式和post方式,那么我们来比较一下他们之间的区别:
GET和POST的区别:
1、从功能上来讲,GET请求一般用来获取数据,POST请求用来提交数据
2、GET请求将参数拼接到URL上,而POST请求将参数放到请求主体中
3、GET请求的URL会有长度限制(是由于浏览器地址栏输入框对于URL有长度限制),而POST
可以传输很多数据(POST请求也有长度限制,这是由于为了服务器安全和稳定浏览器会对
Content-length进行限制)。
4、相对来说,POST要比GET安全
HTTP响应报文
HTTP响应报文与HTTP请求相似,HTTP响应也由3个部分构成,分别是:
响应行:包含协议状态版本代码描述
响应头(Response Header)
响应正文
下面是一个HTTP响应的例子:
HTTP/1.1 200 OK ----------------------响应行
Server:Apache Tomcat/5.0.12 ----------
Date:Mon,6Oct2003 13:23:42 GMT 响应头
Content-Length:112 ----------
<html> --------------------响应正文
<head>
<title>HTTP响应示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>
从上面可以看到响应行种会有响应状态码,代表服务器处理HTTP请求状态。
1XX-信息类(Information),表示收到Web浏览器请求,正在进一步的处理中
2XX-成功类(Successful),表示用户请求被正确接收,理解和处理例如:200 OK
3XX-重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作。
4XX-客户端错误(Client Error),表示客户端提交的请求有错误 例如:404 NOT Found
意味着请求中所引用的文档不存在。
5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理:如 500
常用的状态码
200 服务器成功返回内容
301/2 临时/永久重定向
304 资源未被修改过,重定向到浏览器缓存
404 请求内容不存在
403 (Forbidden/禁止)
500 服务器暂时不可用
503 服务器内部错误
浏览器缓存机制
304表示上次缓存的资源没有改变------浏览器如何知道是否直接取缓存的内容
请求头:
if-None-Match: 匹配etag 如果它修改了 不取缓存
If-Modified-Since:将先前服务器端发过来的最后修改时间戳发送回去
响应头:
etag --->标记图片资源
last-Modified (服务器最后修改的时间)和 etag 配合使用
Date: 服务器响应内容日期
Expires:内容保质期,表示存在时间,允许客户端在这个时间之前不去检查(发请求)
等同max-age的效果。但是如果同时存在,则被cache-control的max-age覆盖。
Cache-control:内容缓存时间
Cache-control的属性值:
no-cache 不被缓存的,只不过每次在向客户端(浏览器)提供响应数据时缓存
都要向服务器评估缓存响应的有效性。
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和
响应消息都不使用缓存。 根据缓存超时
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定的max-stale
消息的值,那么客户机可以 接收超出超时期指定值之内的响应消息。
ETags和If-None-Match的工作原理是在HTTP Response中添加ETags信息。当客户端再次请求该资源时,将在HTTP Request中加入If-None-Match信息(ETags的值)。如果服务器验证资源的ETags没有改变(该资源没有改变),将返回一个304状态;否则,服务器将返回200状态,并返回该资源和新的ETags。
参考:HTTP深入浅出