http协议的基本内容

http协议
什么是协议:
计算中的协议和现实中的协议是一样的,一式双份/多份;
双方都遵从共同的一个规范,这个规范就可以称为协议

Http协议的工作流程

客户端:
Web服务器:apache,Nginx…iis;
0、原始状态:客户端与服务器之间没有关系;
1、客户端请求服务器:建立连接;
什么是链接:链接就是网络上的虚拟电路;
2、服务器沿着链接返回响应信息;
3、断开连接;

HTTP 请求信息和响应信息的格式

请求:
浏览器能发送HTTP协议,http协议一定要用浏览器来发送么?
答:不是,HTTP既然是一种协议,那么只要满足这种协议,什么工具都能发

Get /0606/01.php HTTP/1.1 //请求行: 1、get:请求方法;2;/0606/01.php请求资源
3;http/1.1请求协议
虚拟目录host:localhost // 请求头部信息
空行
头部信息结束后,有一个空行;头部信息和主体信息(如果有)需要空行做区分;即使没主体信息,空行也不能少
1、 请求行:
请求行分为三部分:
请求方法:get,post,put,delete,trace,options;
请求路径:(就是url的一部分)
所用协议 :
2、 请求头信息
3、 请求主体信息(可以没有)
4、 头信息结束后和主体信息之间要空一行

响应信息:
响应行:
HTTP/1.1 200 0K;相应行信息:1、协议版本,2、状态码;3、状态文字
响应头信息:
key:value;
date:20200626;
contente-length:主体的长度

主体:
hello http:

用POST方法完成http请求:头部信息要标明主体的长度,post比get多了主体信息,但是服务器任然没接到信息,post时,要告诉服务器content –type:application/x-www.from-urlencoded

Post /0606/02.php http/1.1
Host:localhost 头部信息
Content-type:application/x-www.from-urlencoded//告诉服务器是http送来的数据包
Content-length:23 内容长度

http:请求方法有哪些:
get,post,put,trace,delete,options…
注意虽然http支持这些方法;但web server不一定都允许或支持该方法。
head和get基本一致,只是不返回内容,比如我们只是想确认某个文件是否存在,不需要返回内容,返回响应码,确定服务是否正常情况;
put 方法:往服务器一个资源传输内容;
put /0606/post.txt http/1.1
host:localhost
content-length:5
world

TRACE:
是用了代理上网,比如用代理访问new.163.com,你想看看代理有没有修改你的HTTP请求,可以用TRACE来测试一下,163.com的服务器就会把最终收到的请求返回给你
Trace / http/1.1
Host:new163.com
Options:是返回服务器可用的请求方法:
Options / http/1.1
Host:new163.com

状态码、状态文字
状态码 是用来反应服务器的响应情况的,
最常用的如:200 ok, 404 NOTFound
状态文字:
信息:接收到请求,继续处理;
成功:操作成功地收到,理解和接受;
重定向:为了完成请求,必须采取进一步措施
客户端错误:请求的语法有错误或不能完全被满足;
服务端错误:服务器无法完成明显有效的请求。

200-服务器成功返回网页
301/302- 永久/临时重定向307 重定向中保持所有的数据

默认302重定向

304- not modified未修改
第一次获取请求服务器,会记录时间,标记(Etag:可以理解为签名、唯一标识),第二次请求,会带着时间和标记去请求服务端,如果服务端在这个时间段标识后没做修改,直接从缓存中取,表示未修改。
未成功的状态码:
404-请求网页不存在
503 服务器暂时不可用,
500 服务器内部错误

http:防盗链
经常引用图片显示???;服务器如何知道这个图片实在站外被引用的呢;
还有网站的统计结果,统计用户从何而来?
???统计时是如何得知用户从哪里来到本网站的的?

在http协议中;头信息里有一个重要的选项,refer
Refer :代表网页的来源,即上一页的地址;
如果直接在浏览器输入地址;回来进来则没有referer;referer不合法则被禁止访问;
如何配置apache服务器用于图片防盗链?
原理:我们可以在http协议层面,在web服务器层面根据http协议的referer头信息来判断
如果来自站外,则统一重写一个很小的防盗链提醒图片上去。

具体步骤:
1、打开apache重写模块,mod_rewrite
#LoadModule reweite_module modules/mod_write.so,前面的#号去掉,并重启apache
2、在需要防盗的网站或目录,写.hatccess文件,并指定防盗链规则;
3、如何指定,分析referer信息,如果不是来自本站,用重写
重写规则:
哪种情况重写:
是jpeg/jpg/gif/png图片时;
是referer头与localhost不匹配时
重写
怎么重写?
统一rewrite到某个防盗链图片
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ..(JPG|JPEG|gif|png) [NC] 重写条件
RewriteCond %{ http_referer } !localhost 不是localhost就重写 重写条件
RewriteRule .
www.small.com重写到哪
反防盗链:
http-> setHeader(referer:http:localhost) 设置header伪造referer

http缓存控制

如果网站比较大,有N台缓存服务器,那么这N台缓存服务器,如何处理服务器上文件?
1、 要不要缓存;
2、 缓存多久?
思考:缓存服务器与主服务器,应该有一些协议,来说明这两个问题?
答:还是http协议,用头信息的cache-control来控制;
具体用法,打开apache的expires扩展,利用扩展来控制图片,css、html等文件,控制是否缓存,及缓存的生命周期;
相关模块:
ExipiresActoive On
在hatccess中,具体如下:

ExpireDefault 时设置默认的缓存参数;
ExpireBytype是按照文件类型来设计独特的缓存参数
后面四个参数:
Base:基于那个时间点计算有效期;
Access/now 基于响应的瞬间,比如,从此瞬间到一个月之后;
Modification:基于请求文件最后的修改日期来计算,比如最后修改日期的往后一周内有效;
Num:缓存时间大小;
Type:缓存时间单位。

如何设置服务器没有缓存:
比如个人信息不允许缓存服务器缓存,必须到服务器去请求
Control-cache: no-store,must-recalidate//意味着不允许缓存必须去主服务器验证
可以利用apache的header模块设置
ExipiresActive On
ExpireByType imge/jpg “access plus 30 days”
<FileMatch “.(gif)$>
Header set cache-Control “no-cache,must-revalidate”

HTTP内容压缩:
Content-Encoding
原理:为了提高网页在网络上的传输速度,服务器对主体信息进行压缩,如常见的gzip的压缩,deflate压缩,compress压缩以继google的sdch压缩;
如何在apache服务器启用压缩功能:
1、 开启deflate或gzip模块
2、 在conf文件中写如下代码:

为什么要指定文件类型来压缩?
答:压缩也要耗CPU资源,图片/视频,压缩比较大,效果不好。
服务器如何知道我们浏览器是支持gzip的?
答:客户端允许发一个Accep-Encoding头信息,与服务器协商支持某压缩格式

HTTP协议持久链接+分块传输—>反向ajax,又叫comet,server push
原理,一般而言,http协议特点,链接<>断开
具体断开时间
服务器响应content-length,收到指定长度的内容时,就断开了;
在http1.1中允许不写content-length 比如不知道具体长度;
这时需要一个特殊content-type:chunked
分区传输原理:
123H\r\h;
123个长度内容给服务器
.
.
.
50h\r\h;
.
0\r\h(表示服务器说内容发完了)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值