PythonWeb开发基础(一)
B/S开发和http协议
推荐书籍:《HTTP权威开发指南》
前端:数据的格式化呈现,python中的format函数其实就在做这件事情。
后端:纯玩数据。
CS:即Client, Server开发,基于TCP和UDP协议。
BS:即Browser, Server开发,基于HTTP协议,是一种特殊的CS开发。
http:超文本传输协议
html:超文本标记语言
传输的“数据”本身不过是一串二进制码而已,协议是为了让数据传过去对方能知道我在说什么。
html文件是纯文本,浏览器就通过文本渲染出页面。html文本中包含数据,和数据的呈现方式(标记)。
http协议:
http是一个无状态协议,即不知道收到的两次请求是否来自同一个客户端。
cookie,服务端可据此判断请求是否和之前有关联。
url:uniform resource locator,统一资源定位符
url的结构:
schema://host[:port#]/path/.../[;url-params][?query-string][#anchor] http://www.magedu.com/pathon/index.html?id=5&name=python
- 注意:url的路径只是一个“逻辑上的“路径,服务端返回给你的并不是路径指向的文件,而只需要返回内容,这个内容并不需要是从一个文件中读出来的,服务端不管怎么拼出这个内容,然后返回给你都行。
HTTP报文:
分为Request(请求),和Response(响应)。
请求
请求报文的第一行为请求消息行
<请求方法> <请求路径> <协议版本> GET / HTTP/1.1
请求方法:
- GET:通过url请求资源
- POST:提交数据;头后面写两个换行,再写数据。
- HEAD:与GET类型,只是服务器不返回正文;常用于测试服务端是否正常。
测试请求的工具:
- Postman
我在Edge浏览器上搜索Postman插件,但是只找到了Postwoman,发了个GET请求试试:
URL中本身也可以传达信息(我还没太懂这句话想要表达的意思),例如
http://www.magedu.com/python/student/001
就表示要操作student中的001号,但是是要读取呢?还是修改、删除呢?这时候就看请求方法,比如方法为GET时,就要读取。
响应
第一行为
<协议版本> <状态码> <状态信息> HTTP/1.1 200 OK
常见状态码(status code):
状态码在响应头第一行
1xx提示信息,表示请求已被成功接收,继续处理
2xx表示正常响应
200正常返回了网页内容
3xx 重定向
301面永久性移走,永久重定向。返回新的URL,浏览器会根据返回的 url 发起新的 request 请求
302 临时重定向
304资源未修改,浏览器使用本地缓存。
4xx 客户端请求错误
404 Not Found,网页找不到,客户端请求的资源有错
400请求语法错误
401请求要求身份验证
403服务器拒绝请求
5xx 服务器端错误
500服务器内部错误
502上游服务器错误,例如 nginx 反向代理的时候.
nginx,反向代理,Web开发必会(可能我暂时还用不到叭)。
连接
- 无状态:服务器无法知道2次请求之间的联系。后面可以通过cookie、session来判断。
- 有连接:基于TCP协议,是面向连接,需要3次握手、4次断开。
- 短连接:一个连接打开后,会保持一段时间,因为TCP的连接创建销毁成本高。