7-1python语法基础-网络编程-HTTP协议
############### HTTP协议 ##############
""" 当你在浏览器地址栏敲入“http://www.cnblogs.com/”,然后猛按回车,呈现在你面前的,将是博客园的首页了(这真是废话,你会认为这是理所当然的)。 作为一个开发者,尤其是web开发人员,我想你有必要去了解这一系列的处理流程,
在这期间,浏览器和服务器到底是如何打交道的?服务器又是如何处理的?浏览器又是如何将网页显示给用户的呢? """
############### HTTP协议 ##############
""" 何为http协议(Hypertext Transfer Protocol,超文本传输协议)? 所谓协议,就是指双方遵循的规范。http协议,就是浏览器和服务器之间进行“沟通”的一种规范。我们在看空间,刷微博...都是在使用http协议,当然,远远不止这些应用。 http是属于“应用层的协议”,而且是基于TCP/IP协议的。
"""
############### HTTP协议 ##############
""" 浏览器是客户端,向浏览器请求的格式如下: 一个完整的http请求消息,包含 1,一个请求行, 2,若干个消息头(请求头) 3,换行, 4,实体内容 请求行:描述客户端的请求方式、请求资源的名称、http协议的版本号。 例如: GET/BOOK/JAVA.HTML HTTP/1.1 GET / HTTP/1.1 ,这是要获取什么数据,这一行必须要有 请求头(消息头)包含(客户机请求的服务器主机名,客户机的环境信息等): Accept:用于告诉服务器,客户机支持的数据类型 (例如:Accept:text/html,image/*) Accept-Charset:用于告诉服务器,客户机采用的编码格式 Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式 Accept-Language:客户机语言环境 Host:客户机通过这个服务器,想访问的主机名 If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间 Referer:客户机通过这个头告诉服务器,它(客户端)是从哪个资源来访问服务器的(防盗链) User-Agent:客户机通过这个头告诉服务器,客户机的软件环境(操作系统,浏览器版本等),
可以根据这个反爬虫,爬虫简单,难的是反爬虫,耗费时间都是在突破这个发爬虫,验证码也是为了发爬虫, Cookie:客户机通过这个头,将Coockie信息带给服务器 Connection:告诉服务器,请求完成后,是否保持连接 Date:告诉服务器,当前请求的时间 (换行) 实体内容: 就是指浏览器端通过http协议发送给服务器的实体数据。例如:name=dylan&id=110 (get请求时,通过url传给服务器的值。post请求时,通过表单发送给服务器的值) """
############### HTTP协议 ##############
""" 再看看HTTP响应消息(服务器返回给浏览器的): 一个http响应代表服务器端向客户端回送的数据, 它包括: 一个状态行, 若干个消息头, 换行 实体内容 状态行: 状态行: 例如: HTTP/1.1 200 OK (协议的版本号是1.1 响应状态码为200 响应结果为 OK) http/1.1 200ok,这是说使用的http协议的版本,请求是否成功,这一句必须要有, 响应头(消息头)包含: Location:这个头配合302状态吗,用于告诉客户端找谁 Server:服务器通过这个头,告诉浏览器服务器的类型 这是使用的什么服务器,一般网站都是Nginx或者阿帕奇,现在有很多使用的淘宝的tengine,这是淘宝针对大用户量基于Nginx开发的 Content-Encoding:告诉浏览器,服务器的数据压缩格式 Content-Length:告诉浏览器,回送数据的长度 Content-Type:告诉浏览器,回送数据的类型 Last-Modified:告诉浏览器当前资源缓存时间 Refresh:告诉浏览器,隔多长时间刷新 Content-Disposition:告诉浏览器以下载的方式打开数据。例如: context.Response.AddHeader("Content-Disposition","attachment:filename=aa.jpg"); context.Response.WriteFile("aa.jpg"); Transfer-Encoding:告诉浏览器,传送数据的编码格式 ETag:缓存相关的头(可以做到实时更新) Expries:告诉浏览器回送的资源缓存多长时间。如果是-1或者0,表示不缓存 Cache-Control:控制浏览器不要缓存数据 no-cache Pragma:控制浏览器不要缓存数据 no-cache Connection:响应完成后,是否断开连接。 close/Keep-Alive Date:告诉浏览器,服务器响应时间 换行 服务器返回的数据主要是分为两个部分:还有一个状态行和换行, 1,是头部,header 2,是body,这是内容, 怎么区分header和body? 服务器回复的数据,如果遇到第一个换行下面的就是body, 实体内容(实体头): 响应包含浏览器能够解析的静态内容,例如:html,纯文本,图片等等信息 理解了以上的http请求消息和响应消息,相信你对于http协议已经理解得足够深刻了。 """
############### HTTP协议 ##############
"""
浏览器访问服务器的过程:这是一个面试题, 输入域名,比如baidu.com, http协议的认识。流程: 1.域名解析,会到dns服务器会找到对应的ip地址,全球的都在这里, 域名解析检查顺序为:浏览器自身DNS缓存---》OS自身的DNS缓存--》读取host文件--》本地域名服务器--》权限域名服务器--》根域名服务器。
如果有且没有过期,则结束本次域名解析。域名解析成功之后,进行后续操作 2.tcp3次握手建立连接 3.建立连接后,发起http请求 4.服务器端响应http请求,浏览器得到到http请求的内容 5.浏览器解析html代码,并请求html代码中的资源 6.浏览器对页面进行渲染,展现在用户面前,浏览器拿到响应报文后,再通过 浏览器引擎去渲染网页,解析DOM树,javascript引擎解析并执行脚本操作,插件去干插件该干的事儿 说白了,所谓web的本质,无非是:请求/处理/响应 ,任何的web服务器,任何的服务端编程语言,都没法脱离这个本质。 """
############### HTTP协议 ##############
""" 列举Http请求中常见的请求方式 HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式 get post delete put OPTIONS HEAD TRACE CONNECT """
############### HTTP协议 ##############
""" 谈谈你对HTTP协议的认识。1.1 长连接 HTTP是一个属于应用层的面向对象的协议 HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。 基于TCP/IP 双方建立通信的顺序,以及Web页面显示需要 处理的步骤,等等。像这样把与互联网相关联的协议集合起来总称为 TCP/IP。而http协议是基于TCP/IP协议之上的应用层协议。 基于请求-响应模式 HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回 无状态保存 HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。 使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。
这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成 如此简单的。 可是,随着Web的不断发展,因无状态而导致业务处理变得棘手 的情况增多了。
比如,用户登录到一家购物网站,即使他跳转到该站的 其他页面后,也需要能继续保持登录状态。
针对这个实例,网站为了能 够掌握是谁送出的请求,需要保存用户的状态。
HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能, 于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。 """
############### HTTP协议 ##############
HTTP响应常见状态码分类 1、HTTP常见响应状态码及解释 2XX Success(成功状态码) 200 表示从客户端发来的请求在服务器端被正常处理 204 该状态码表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分 206 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求 3XX Redirection(重定向状态码) 301 永久性重定向 302 临时性重定向 4XX Client Error(客户端错误状态码) 400 该状态码表示请求报文中存在语法错误 401 该状态码表示发送的请求需要有通过HTTP认证的认证信息 403 该状态码表明对请求资源的访问被服务器拒绝了。 404 该状态码表明服务器上无法找到请求的资源 5XX Server Error(服务器错误状态码) 500 该状态码表明服务器端在执行请求时发生了错误。 503 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
############### HTTP协议 ##############
get请求和post请求的区别 请求方式: get与post请求 GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制. GET与POST请求在服务端获取请求数据方式不同。 GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,
如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
############### HTTP协议 ##############
""" 抓包工具: 写程序一定要会用抓包工具, 如果你发的数据对方死活收不到,就要使用抓包工具,你只要发送成功了,你就会看到抓包的内容,这是排查bug的一个工具, 会把四个层的内容都显示出来, """
############################################
############################################
############################################
技术改变命运