Django学习之web应用

1>web应用之服务器的响应

先回顾下之前网络编程 客户端-服务端交互的过程,实质上就是客户端发起建立连接的请求,服务端相应,3次握手之后,链接建好,相互(请求-响应-请求-响应。。。)通信。Web应用程序是一种可以通过Web访问的应用程序,这类应用程序一般通过浏览器来运行(浏览器来发送请求),服务器这边则针对不同的请求返回(响应)不同的内容给客户端,所以,在网络编程来说,浏览器就是socket客户端,服务器就是socket服务端。

    说了一大堆,先回顾之前socket通信服务端怎么写的,

    

    来个最基本的, 先 建立套接字对象,再绑定ip和端口,再开启监听,准备接受客户端的请求建立连接,再接受客户端的请求,再发送字符串,关闭连接。

    恩,此时若有个socket客户端,也写些必要的通信代码,那么client-server就可以相互通信了,

    但是通过网页访问这个socket-server会怎样呢?如下


这是正常的,刚刚说了,当前这个socket-server只适合跟socket-client通信,而不能跟web通信,为什么。

因为这个socket-server的写法不符合web-client通信的标准,首先明确一点,web通信本质上就是浏览器通过http协议发送请求,服务端收到青后再进行相应,那么这个http请求必然是有一套它自己的标准呀,不然它如何识别你这个server端究竟是要跟

应用程序交互还是跟浏览器交互呢?

恩,那么socket-server稍作修改,如下



响应的固定格式:协议版本 状态码 状态码原因短语 后面接两个\r\n\r\n

当浏览器收到这一堆字符串的时候,就会以‘\r\n\r\n’进行字符串切割,前面的信息称为响应首行,后面的就是响应主体

当解开来发现响应首行 http协议,那么浏览器就会去渲染主体信息,呈现出网页显示的内容。

2>web应用之客户端的请求

理解了web响应部分需要按照http格式的标准,我们再来看下请求部分,毫无疑问,请求也一套标准

改下代码,打印下接受的请求,我们先看下请求的部分


注意前面的 GET / HTTP/1.1\r\n,没错,这就是 请求首行,请求类型,URI ,协议版本,

再\r\n之后是请求头,再\r\n\r\n是请求体(get请求没有请求体,若需要带参数请求,它是以?连接在URI后面,这里的请求体是post请求所写的参数,记住一句:只有post请求才有请求体)

挖两张图来屡一下思路吧


如上请求报文的组成,看URI,我们之前URI就是一个/,是因为我们的浏览器上面的直接就是ip:端口,并就没有加路径,

所以是/,也可以理解为根路径,要去往一些子模块的时候就可以加上路径区分。


    get和post的区别

  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
  • GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
  • GET与POST请求在服务端获取请求数据方式不同。
  • GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

3>再回过头来看看socket-server的响应

    我们改下脚本,如下,在响应体中加上一些html标签,看下效果



h1标签成功的被解析了,那么可以继续往后添加a标签,div块,img等等,再写些样式,一个漂亮的网页是出来了。

是这样吗,是这样吗,--------------肯定不是呀,一直在这里追加标签、内容,得多累呀,

我们之前写的前面页面也是一个文件,一个html文件,把它的所有内容都读出来,再发送给客户端,不就行了

socket-server再改下,如下




我们再来看看网页这边的请求,F12---Network

相应首行就包含了URI,请求类型,状态码和说明等信息,下面还有请求头信息,Preview是响应体的预览效果,因为

Response里面是箱体的所有内容(内容,html标签,css样式等等),Preview就是浏览器渲染之后的预览效果。




恩,差不多可以了,本质上讲,这,,就是一个web框架,

4>web相应之状态码


5>get请求和post请求带参数的区别

socket-server不用改啥,若出现网页上中文显示乱码的问题,那么就是字符串编码跟你电脑的编码不一致,更换编码方式即可


如上,form表单提交按钮,触发get请求,我们看下效果,浏览器输入用户名和密码,点击提交,如下


直接用?问好拼接在URI上面了,


再换成post看下



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值