HTTP必会知识点

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深入浅出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值