当前位置: 首页 > news >正文

web应用与http协议

 

web应用

Web应用程序是一种可以通过web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件。

应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助谷歌,火狐等浏览器来运行。WEB应用程序一般是B/S模式。Web应用程序首先是“应用程序”,和用标准的程序语言,如java,python等编写出来的程序没有什么本质上的不同。在网络编程的意义下,浏览器是一个socket客户端,服务器是一个socket服务端。

import socket

def handle_request(client):

    request_data = client.recv(1024)
    print("request_data: ",request_data)
    client.send("HTTP/1.1 200 OK\r\n\r\n".encode("utf8"))
    client.send("<h1 style='color:red'>Hello, 路飞学城! </h1>".encode("utf8"))

def main():

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost',8800))
    sock.listen(5)

    while True:
        print("the server is waiting for client-connection....")
        connection, address = sock.accept()
        handle_request(connection)
        connection.close()

if __name__ == '__main__':

    main()

web框架

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。浏览器和服务器的是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。

wsgiref模块

最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。

如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。

正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。这个接口就是WSGI:Web Server Gateway Interface。而wsgiref模块就是python基于wsgi协议开发的服务模块。

from wsgiref.simple_server import make_server


def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, 路飞学成!</h1>']

httpd = make_server('', 8080, application)

print('Serving HTTP on port 8000...')
# 开始监听HTTP请求:
httpd.serve_forever()

本质上讲,这个文件就可以称为一个web框架。

 

http协议简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

http协议特点

  • 基于TCP/IP

计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通 信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间 的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。协议中存在各式各样的内容。从电缆的规格到IP地址的选定方法、 寻找异地用户的方法、双方建立通信的顺序,以及Web页面显示需要 处理的步骤,等等。像这样把与互联网相关联的协议集合起来总称为TCP/IP。而http协议是基于TCP/IP协议之上的应用层协议。

  • 基于请求-响应模式

HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务端在没有接收到请求之前不会发送响应。

 

  • 无状态保存

HTTP是一种不保存状态,即无状态协议。HTTP协议 自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别, 协议对于发送过的请求或响应都不做持久化处理。

使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产 生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成 如此简单的。可是,随着Web的不断发展,因无状态而导致业务处理变得棘手 的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的 其他页面后,也需要能继续保持登录状态。针对这个实例,网站为了能 够掌握是谁送出的请求,需要保存用户的状态。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能, 于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管 理状态了。有关Cookie的详细内容稍后讲解。

  • 无连接

无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

 

http请求协议与响应协议

http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的响应协议。用于HTTP协议交互的信被为HTTP报文。请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身是由多行数据构成的字 文本。

请求协议

请求格式

请求方式:get与post请求

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

 

响应协议

响应格式

响应状态码

状态码的值 是当客户端向服务端发送请求时,返回的请求结果。借助状态码,用户可以知道服务端时正常处理了请求,还是出现了异常。

 

转载于:https://www.cnblogs.com/Xuuuuuu/p/10519758.html

相关文章:

  • PDF格式文件如何编辑,怎样修改PDF背景颜色
  • js confirm函数
  • Bootstrap学习:Bootstrap 环境安装
  • Dubbo Mesh 在闲鱼生产环境中的落地实践
  • acl 之 xml 流解析器
  • Linaria 1.0正式发布:一个零运行时CSS-in-JS库
  • 从后端到前端的转变:如何选择框架?
  • Pascal's Triangle LeetCode
  • php常用字符串函数
  • ORACLE--分区表数据清理
  • 那些到了 30 岁的技术人,后来都去哪了?
  • 重装操作系统-mysql数据库还原
  • elasticsearch使用指南之Elasticsearch Document Update API详解、原理与示例
  • 链表 其他操作
  • 985本科生做了3年程序员,晒出真实年薪,网友:我没看错吧
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • JAVA 学习IO流
  • js面向对象
  • Linux快速复制或删除大量小文件
  • Mac转Windows的拯救指南
  • MySQL QA
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 高度不固定时垂直居中
  • 基于axios的vue插件,让http请求更简单
  • 说说动画卡顿的解决方案
  • 移动端唤起键盘时取消position:fixed定位
  • 译自由幺半群
  • 原生Ajax
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​ubuntu下安装kvm虚拟机
  • ​第20课 在Android Native开发中加入新的C++类
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (二)正点原子I.MX6ULL u-boot移植
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)ABI是什么
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)socket Aio demo
  • (转)创业的注意事项
  • (转载)利用webkit抓取动态网页和链接
  • .jks文件(JAVA KeyStore)
  • .net FrameWork简介,数组,枚举
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 设计一套高性能的弱事件机制
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .pop ----remove 删除
  • ;号自动换行
  • [<事务专题>]
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作