zoukankan      html  css  js  c++  java
  • 在探http请求

    参考:https://itbilu.com/other/relate/Ny2IWC3N-.html

    Cookie和Session都是为了解决HTTP协议的无状态问题,存储HTTP通讯中客户端与服务器之间的会话状态。不同的cookie依赖HTTP请求头与响应头实现存储在客户端,而Session存储在服务器端,Session可以通过Cookie实现,也可以使用URL回写的方式实现。

    HTTP的无状态

    HTTP协议是无状态的,客户端(浏览器)与服务器之间基于请求-响应 实现数据交互,响应结束后两者之间的连接就会断开。由于每次会话都是一新连接,所以服务器无法从连接上获取会话状态。这样就会带来一些问题,如:页面发生跳转服务器无法得知用户上一页面输入,也无法得知用户是否登录等。

    解决方法:一个HTTP请求是由3部分构成的:状态行、请求头、请求体。其中状态行和请求头在所有的HTTP请求方法中存在,

    请求体只有POST,PUT等部分请求中存在

    服务器收到客户端的请求之后,会对用户进行响应,一个HTTP响应也同样由3部分构成:状态行、响应头、响应体。

    响应体只存在部分HTTP请求方法响应中。

    如上所示,HTTP请求/响应中,除正文外,还有一个请求/响应头。而这个 请求响应头都是可以设置的。根据这个特性我们可以在请求头加一个记录用户状态信息请求头,就可以实现用户状态的传递。

    这也是cookie的实现方式。cookie是存储在客户端的一个特殊的字符串,在发送HTTP请求时,这个字符串会添加到一个名为Cookie的请求头中一同发送给服务器。Session实现类似,不同的是状态信息存储在服务器中,而只是客户端的Cookie中存储了表示该会话标示的SessionId

    HTTP消息头(常见的http请求头与响应头)

    HTTP消息头是指,在超文本传输协议(Hypertext Transfer Protocol)的请求和响应消息中,协议头部分的那些组件。HTTP消息头用来准确描述正在获取的资源、服务器或者客户端的行为,定义HTTP事务中具体操作参数

    关于HTTP请求头

    Accept :可接受的响应内容类型(Content-Types)

    Accept-Encoding:可接受的响应内容的编码方式

    Cookie:由之前服务器通过Set-Cookie设置的一个HTTP协议Cookie

    Host:服务器的域名以及服务器所监听的端口

    Origin:发起一个针对跨域资源共享的请求来源

    Connection:客户端(浏览器)想要优先使用的连接类型

    Proxy-Connection:用来对 HTTP 连接进行说明

     Referer:表示浏览器所访问的前一个页面,

    User-Agent:浏览器身份标示字符串

    响应头

    Access-Control-Allow-Origin:指定哪些网站可以跨域资源共享

    Cookie

    HTTP协议是一种无状态协议、客户端与服务器建立并传输数据,数据传输完成后,连接就会关闭,由此服务器无法知道上次干什么了

    Cookie是解决HTTP无状态的有效手段,服务器可以设置或读取Cookie中所包含的信息。当用户登录后,服务器会发送登录凭据的Cookie到用户浏览器客户端,而浏览器对该Cookie进行某种形式的存储。用户再次访问该网站,浏览器就会发送该Cookie到服务器,服务器对该用户进行验证,合法时,用户不必输入用户名密码可直接登录

    本质上讲,Cookie是一段文本信息。客户端请求服务器,如果服务器需要记录用户状态,就在响应用户请求时,发送一段cookie信息,客户端浏览器保存改Cookie信息,当用户再次访问该网站时,浏览器会把Cookie做为请求信息的一部分提交改服务器。服务器检查Cookie内容,以此来判断用户状态,服务器还会对Cookie信息进行维护,必要时对Cookie内容进行修改。

    Cookie类型:按存储分为内存式Cookie和硬盘式Cookie,内存式Cookie存储在内存中,浏览器关闭就会消失,硬盘式Cookie只有等Cookie过期才会清除

    Cookie通过Cookie请求头和setCookie响应头实现

    Set-Cookie-服务器响应头,用于告诉客户端要设置cookie

    Cookie-请求头,根据Set-Cookie设置并保存到客户端的Cookie值,会再次发送HTTP请求时通过这个请求头一同发送到服务器。

     

    用户请求客户端后,如果需要记录状态服务器会在请求响应中包含一个Set-Cookie响应头,会将Cookie保存到客户端

    对于一个需要保存状态的HTTP响应来说

    客户端收到响应头之后,会将Cookie UserID=name 进行存储,并设置超过时间3600秒而Version是Cookie的版本

    再次请求服务器时,客户端会在请求头中包含一个Cookie请求头,其值就是从服务器返回来的状态信息

    Session

    Cookie很好的解决了HTTP通讯中状态问题,但其本身也存在一些问题,如:

    客户端存储,可能会被修改或删除

    发送请求时,Cookie会被一起发送给服务器,当Cookie数据量较大时会带来额外的请求数据

    客户端对Cookie大小有一定限制

    Session解决了Cookie的一些缺点,Session同样为了记录用户状态,对每个用户来说,相应的一个状态保存在服务器中,而只是在客户端记录一个sessionID用于区分哪个用户的Session

    与cookie相比Session有一定优势

    Session值存储在服务器,相对来说安全

    客户端发送给服务器只有一个sessionID,数据量小

    Session同样需要客户端存储一个sessionID,可以这个值存储在Cookie,每次发送请求时,通过Cookie请求将其发送到服务器,也可以不使用cookie,而将sessionID做为一个额外的请求参数,通过URL或请求体发送到服务器

    日常所遇,随手而记。
  • 相关阅读:
    使用canvas实现擦玻璃效果
    安装jdk For Windows
    墙裂推荐4款js网页烟花特效
    再次推荐一款逼真的HTML5下雪效果
    HTML5播放暂停音乐
    周末web前端练习
    Javascript贪食蛇小游戏
    jquery实现更多内容效果
    jQuery省市区三级联动插件
    Web前端测试题
  • 原文地址:https://www.cnblogs.com/zhihou/p/7611104.html
Copyright © 2011-2022 走看看