python爬虫-HTTP

HTTP协议是Hyper Text Transfer Protocol (超文本传输协议)的缩写。HTTP 协议和 TCPAIP 协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。

HTTP之状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

200 OK
客户端请求成功

301
永久重定向,该状态码表示请求的资源已被分配了新的URL, 以后应使用资源现在所指的URL。 也就是说, 如果已经把资源对应的URL保存为书签了, 这时应该按 Location 首部字段提示的URL重新保存。

302 Found
临时性重定向。 该状态码表示请求的资源已被分配了新的URL, 希望用户(本次) 能使用新的URL访问。和301Moved Permanently 状态码相似, 但302状态码代表的资源不是被永久移动, 只是临时性质的。 换句话说, 已移动的资源对应的URL将来还有可能发生改变。 比如, 用户把URL保存成书签, 但不会像301状态码出现时那样去更新书签, 而是仍旧保留返回302状态码的页面对应的URL。

400 Bad Request
客户端请求有语法错误,不能被服务器所理解

401 Unauthorized
请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden
服务器收到请求,但是拒绝提供服务

404 Not Found
请求资源不存在,eg:输入了错误的URL

500 Internal Server Error
服务器发生不可预期的错误

503 Server Unavailable
服务器当前不能处理客户端的请求,一段时间后可能恢复正常。


COOKIE和SESSION有什么区别

Cookie

HTTP是无状态协议, 它不对之前发生过的请求和响应的状态进行管理。 也就是说,无法根据之前的状态进行本次的请求处理。假设要求登录认证的Web页面本身无法进行状态的管理(不记录已登录的状态), 那么每次跳转新页面不是要再次登录, 就是要在每次请求报文中附加参数来管理登录状态。不可否认, 无状态协议当然也有它的优点。 由于不必保存状态, 自然可减少服务器的CPU及内存资源的消耗。 从另一侧面来说, 也正是因为HTTP协议本身是非常简单的, 所以才会被应用在各种场景里。保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了Cookie技术。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie 的首部字段信息,通知客户端保存Cookie。 当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求, 然后对比服务器上的记录, 最后得到之前的状态信息。

Session

主要是讲先前用户信息记录在服务器端,并且生成唯一的Session-ID号,客户端仅仅需要在每次访问的时候,提供对应的ID号码,即可从服务器获取先前存储的对应信息。

由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。
思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。所以,总结一下:Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

总体来说Cookie和Session的区别:

  • cookie数据存放在客户的浏览器上,session数据放在服务器上;
  • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session;
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用cookie;
  • 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;

 

posted @ 2023-11-20 10:47  枫樱  阅读(5)  评论(0编辑  收藏  举报