web开发快餐式入门指南 1.1 http

本文详细介绍了HTTP协议的工作原理,包括浏览器如何通过HTTP协议与服务器通信的过程,请求与响应报文的具体格式及其组成部分,以及常用的HTTP方法如GET和POST的区别。

由于web应用大多数都在浏览器中进行操作,所以我们有必要先了解一下浏览器里面到底发生了什么。简而言之,当你在浏览器的地址栏中输入网址并按下回车,或者点击了网页上的某个链接时,浏览器就会按照网址给目标服务器发送请求。浏览器和服务器之间的请求遵循http协议,协议规定了所使用的格式,只有按照这种格式组织的数据才能相互识别。

具体来讲,浏览器先根据url中的主机部分通过dns查询出ip地址,然后组装http报文,发送给这个ip。服务器接到请求后便会处理,然后也会组装一个报文,把结果放入其中发给浏览器。浏览器根据html或js中写好的逻辑,以刷新页面或者弹出消息框等方式和用户交互。这一来一回才算结束。

格式

我们可以用浏览器的开发者工具,或者其它抓包软件进行抓包,从而看到背后的http请求是什么。比如访问www.baidu.com,则有可能会看到这样的报文:

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: ...

HTTP/1.1 200 OK
Server: bfe/1.0.8.14
Date: Tue, 23 Feb 2016 12:43:08 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: private
Expires: Tue, 23 Feb 2016 12:43:08 GMT
Content-Encoding: gzip
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 2
BDQID: 0xd678b56500003dd4
BDUSERID: 18401
Set-Cookie: ...

...

可以看到,上半部分是请求(request)的报文,下半部分是响应(response)的报文。请求和响应的报文都由三部分组成:状态行、消息头(header)和消息体(body)。其中状态行在请求或者响应中,分别叫做请求行和响应行,消息头在请求或者响应中也分别叫做请求头和响应头,消息体也叫正文,是可选的。

请求报文

我们先看请求报文,第一行GET / HTTP/1.1就是请求行,其中GET是方法,/是路径,HTTP/1.1是所使用的HTTP版本。

之后几行以:分割的文本是请求头,请求头的种类很多,其中还有不少自定义的请求头,但是上面列出的都是常见的请求头,我们只需要了解它们。

Host是所请求的域名,由于现在大量虚拟主机和云主机的存在,一个ip的主机上往往有很多个网站,所以要加上Host请求头,不能简单以ip来定位。

Accept是浏览器接受的格式,我们可以看到有html、xhtml和xml。

User-Agent是浏览器的类型,也包含浏览器内核类型和操作系统类型。由于用户可以任意改动请求头,它不一定是可信的。

Accept-Encoding是浏览器接受的编码,我们可以看出浏览器启用了gzip压缩。

Accept-Language是浏览器接受的语言。

Cookie是用户标识用户的数据,由服务端程序生成,储存在浏览器中,每次浏览器访问一个网站,都要带上已有的Cookie。

上面的报文中,由于是GET方法,没有消息体。

消息体如果存在,和消息头以两个换行\n\n分隔。如果有消息体的话,请求头中还要加上两种。一个是Content-Length,是消息体的长度。还有一个是Content-Type,是消息体的格式,这个参数很重要,因为大多数框架都自动解析消息体,如果错了的话就会解析失败。

响应报文

同理,响应报文的第一行HTTP/1.1 200 OK是响应行,HTTP/1.1是版本,200是状态码,OK是状态文本。响应头和请求头的格式一样,但内容有所不同。而且,服务器设置Cookie所用的响应头是Set-Cookie而不是Cookie

上面的响应报文是带消息体的,同样和响应头以\n\n分隔。

方法

接下来要讲一下HTTP的方法。

HTTP的方法有很多种,但是如果你打开抓包软件记录你一天的浏览历史的话,你会发现99%都是GET或者POST,其中GET占大多数。一般情况下,我们只会用到这两种方法,GET常用于资源的获取,比如页面显示,POST则用于动作的提交,比如删除、新增、修改某种资源。

GET和POST都可以带参数,只不过参数在报文中的位置不同。GET方法中的参数出现在路径中,以?分割,比如/path/to/page?k1=v1&k2=v2。而且你也发现了,这种位置上只能写成键值对形式。HTTP协议中并没有对参数的长度进行限制,但由于GET参数是写在url中的,在浏览器以及服务器中会有限制,比如Chome中限制url长度不超过8182字节。

POST的参数在消息体中,长度任意。而且格式任意,比如可以使用json和xml,只要把Content-Type配置对了,让服务器能够正常识别就好。服务器可以限制消息体的长度,但也可以通过配置来取消。

内容概要:本文深入探讨了Django REST Framework(DRF)在毕业设计中的高级应用与性能优化,围绕智能校园系统案例,系统讲解了DRF的核心进阶技术,包括高级序列化器设计、视图集定制、细粒度权限控制、查询优化、缓存策略、异步任务处理以及WebSocket实时通信集成。文章通过详细的代码示例,展示了如何利用DynamicFieldsModelSerializer实现动态字段返回、使用select_related和prefetch_related优化数据库查询、通过Celery实现异步任务、并集成Channels实现WebSocket实时数据推送。同时介绍了基于IP的限流、自定义分页、聚合统计等实用功能,全面提升API性能与安全性。; 适合人群:具备Django和DRF基础,正在进行毕业设计或开发复杂Web API的高校学生及初级开发者,尤其适合希望提升项目技术深度与系统性能的学习者。; 使用场景及目标:①构建高性能、可扩展的RESTful API,应用于智能校园、数据分析、实时监控等毕业设计项目;②掌握DRF高级技巧,如动态序列化、查询优化、缓存、异步任务与实时通信,提升项目竞争力;③优化系统响应速度与用户体验,应对高并发场景。; 阅读建议:此资源以实战为导向,建议读者结合代码逐项实践,重点理解性能优化与架构设计思路,同时动手搭建环境测试缓存、异步任务和WebSocket功能,深入掌握DRF在真实项目中的高级应用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值