http协议学习笔记

原理

HTTP(Hyper Text Transfer Protocol)超文本传输协议。是用于从web服务器传输超文本到本地浏览器的传输协议。HTTP是一个应用层协议,由请求和响应构成,是一个标准的个客户端和服务器模型.
HTTP协议定义了web客户端如何从web服务器请求Web页面,以及服务器如何把Web页面传送给客户端.HTTP协议采用了请求/响应模型.客户端向服务器发送一个请求报文,请求报文包括请求的方法,url,协议版本,请求头部和请求数据.服务器以一个状态行作为响应,响应的内容包括协议的版本,成功或者错误代码,服务器信息,响应头部和响应数据。

HTTP 请求与响应消息的格式

请求:
1 请求行 :
请求的方法:GET POST PUT DELETE TRACE OPTIONS HEAD
请求URL: 就是URL的一部分
协议版本:
GET /cms/page/get/1 HTTP/1.1
2 请求头信息
Host: 192.168.1.4:31001
3 头信息结束后和主体信息之间要空一行
4 请求主体信息

响应:
1 响应行:协议版本 + 状态码 + 状态文字
HTTP/1.1 200
2 响应头信息:
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 09 Jul 2020 06:33:30 GMT
3 空行
4 响应主体信息:
body

请求方法详解

GET:
当客户端要从服务器上读取文档,点开某个链接,或者是通过浏览器上输入网址来浏览网页的时候,使用的都是GET方法。GET方法请求参数和对应的值附加在URL后面,利用一个?代表URL的结尾以及附带参数的开始,参数用key=value键值对的方式书写,参数和参数之间用&符号隔开.一般GET请求的参数的大小受限,最大不超过1024。

POST:
POST方法将请求的参数封装在了HTTP请求的请求体中,以名称/值的形式出现,可以传输大量的数据.POST请求一般用于表单数据的提交中。

HEAD:
确认一个文件是否存在,不需要返回文件的内容

TRACE:
使用代理上网时,使用TRACE看看代理有没有修改你的HTTP 请求。

OPTIONS:
返回服务器是否可用

状态码和状态文字

状态码是用来反应服务器响应情况的。
状态文字是用来描述状态码的,便于人阅读
在这里插入图片描述
302 :临时或永久重定向
304:未修改
307:重定向中保持原来的请求数据

常见的报文头

If-Modified-Since 资源未被修改的情况下返回304未修改
ETag:
If-None-Match:

实战

1 反盗链
Referer: 代表网页的来源,即上一页的地址。
在web服务器层面,根据http协议的referer头信息来判断。如果来自站外,则统一重写到一个很小的防盗链图片上。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ..(jpg|jpeg|gif|png) [NC]
RewriteCond %{HTTP_REFERER} !localhost [NC]
RewriteRule .
http://wwww.xxxx.com/static/image/common/logo.png

2 缓存协议控制
我们观察图片的下载,往往
第一次请求时 200 OK
第二次请求时,304 Not Modified
解释:在网络上,有一些缓存服务器,浏览器也有缓存功能。
当我们第一次下载某图片时,正常下载图片,返回200
基于一个前提-图片不会经常改动,服务器返回200的同时,还返回该图片的签名-Etag(可以理解为图片的指纹)
当浏览器再次访问该图片时,去服务器校验指纹,如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器负担。
具体用法:
在 .htaccess 中,具体语法如下:
ExpiresActive On
ExpiresByType image/jpeg “access plus 30 days”
禁用缓存
Control-cache: no-store,must-revalidate;

在这里插入图片描述
在这里插入图片描述
3 HTTP协议与内容压缩
为了提高网页在网络上的传输效率,服务器对主体信息进行压缩。
常见的 gzip压缩, deflate压缩, compress压缩以及 google chrome正在推的 sdch压缩

启用压缩功能
	1 开启 deflate 或 gzip模块
	2 在 conf 文件中,写如下代码
		<ifmodule mod_deflate.c>
			DeflateCompressionLevel 6
			AddOutputFilterByByte DEFLATE text/plain
			AddOutputFilterByByte DEFLATE text/xml
		</ifmodule>

服务器如何知道浏览器支持gzip?
客户端允许发一个 Accept-Encoding 头信息,与服务器协商。

4 HTTP 协议持久链接 + 分块传输 --> 反向 AJAX(服务器推送)
原理:
一般而言,HTTP 协议的特点,连接<->断开
具体什么时候断开?
服务器响应 content-length,客户端收到指定长度的内容时,也就断开了。
在 http1.1 中,允许你不写 content-length,比如要发送的内容长度确实不知道时。这时,需要一个特殊的 content-type:chunked

优化

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值