1.1 web 应用程序
Web 应用程序是一种可以通过 Web 访问的应用程序, 程序的最大好处是用户很容易访问应用程序, 用户只需要有浏览器即可, 不需要再安装其他软件
B/S 模式(浏览器 / 服务端)
1.2 B/S 架构优点
这种架构采用 Internet 上标准的通信协议 (通常是 TCP/IP 协议) 作为客户机同服务器通信的协议. 这样可以使位于 Internet 任意位置的人都能够正常访问服务器. 对于服务器来说, 通过相应的 Web 服务和数据库服务可以对数据进行处理
在服务器上对数据进行处理, 就处理的结果生成网页, 以方便客户端直接下载
只需要有浏览器就可以了, 不需要安装其他应用程序
1.3 基于 socket 的 Web 应用
- import socket
- server = socket.socket()
- server.bind(('127.0.0.1', 8002))
- server.listen(5)
- while True:
- conn, client = server.accept()
- data = conn.recv(1024)
- # 接收到的消息转化成字符串
- data = str(data, encoding='utf-8')
- print(data)
- resquse_list = data.split('\r\n')
- # 将请求首行再切分
- first_list = resquse_list[0].split(' ')
- # 响应头信息, 协议类型, 200 发送成功,\r\n\r\n 后可以再加响应体(返回给页面的信息)
- conn.send(b'HTTP/. 200 OK\r\nContent-Type:text/html\r\n\r\n')
- if first_list[1] == '/qc1':
- with open('qc1.html', 'rb')as f:
- data = f.read()
- conn.send(data)
- elif first_list[1] == '/qc2':
- with open('qc2.html', 'rb')as f1:
- data = f1.read()
- import datetime
- now = datetime.datetime.now().strftime('%Y-%m-%d %X')
- data = data.replace('hello',now)
- conn.send(data.encode('utf-8'))
- else:
- conn.send(b'404')
- conn.close()
------------------------------------------ HTML 文件: <!DOCTYPE HTML> <HTML lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> hello </body> </HTML>
2.HTTP 协议
2.1 简介
HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写, 是用于万维网 (WWW:World Wide Web ) 服务器与本地浏览器之间传输超文本的传送协议.
HTTP 是一个属于应用层的面向对象的协议, 由于其简捷, 快速的方式, 适用于分布式超媒体信息系统,
HTTP 协议工作于客户端 - 服务端架构之上. 浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 Web 服务器发送所有请求. Web 服务器根据接收到的请求后, 向客户端发送响应信息.
2.2 协议特征
基于 TCP/IP 协议之上的应用层协议;
请求 -- 相应模式, 由客户端发起, 服务端响应;
HTTP 是一种不保存状态, 即无状态 (stateless) 协议. HTTP 协议 自身不对请求和响应之间的通信状态进行保存;
无连接, 限制每次连接只处理一个请求. 服务器处理完客户的请求, 并收到客户的应答后, 即断开连接. 采用这种方式可以节省传输时间
2.3 HTTP 请求与响应协议
2.3.1 定义
浏览器发送到服务端要遵循请求协议(请求报文), 服务器向浏览器返回信息要遵循响应协议(响应报文); 浏览器与服务器通过 HTTP 协议交互的信就是 HTTP 报文(由多行数据构成的文本)
2.3.2 协议格式
请求协议
- # 请求首行: 请求类型 请求地址 请求协议
- GET /index HTTP/1.1\r\n
- # 请求头
- Host: 127.0.0.1:8001\r\n
- Connection: keep-alive\r\n
- Cache-Control: max-age=0\r\n
- Upgrade-Insecure-Requests: 1\r\n
- User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36\r\n
- Accept: text/HTML,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
- Accept-Encoding: gzip, deflate, br\r\n
- Accept-Language: zh-CN,zh;q=0.9\r\n\r\n'
- # 请求体
- ....
- -------------------------------------
GET 与 POST 请求方式
(1)GET 提交的数据会放在 URL 之后, 以? 分割 URL 和传输数据, 参数之间以 & 相连, 如 EditBook?name=test1&id=123456. POST 方法是把提交的数据放在 HTTP 包的请求体中.
(2)GET 提交的数据大小有限制(因为浏览器对 URL 的长度有限制), 而 POST 方法提交的数据没有限制.
(3)GET 与 POST 请求在服务端获取请求数据方式不同
响应协议
- access-control-allow-origin: *
- cache-control: public,max-age=25920000
- content-encoding: gzip
- content-type: application/JavaScript
- date: Sat, 25 Aug 2018 11:31:15 GMT
- last-modified: Tue, 09 Feb 2016 15:15:15 GMT
- server: Tengine
- status: 200
- vary: Accept-Encoding
- -------------------------------------
响应状态码
2.3.3 统一资源定位符(URL)
统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, 是互联网上标准资源的地址. 互联网上的每个文件都有一个唯一的 URL, 它包含的信息指出文件的位置以及浏览器应该怎么处理它
格式
协议://IP: 端口(80)/ 路径? name=lqz&age=18
注:? 之前的是请求路径,? 之后的是请求数据部分, 数据以 & 相连接
来源: http://www.bubuko.com/infodetail-2831808.html