参考: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或请求体发送到服务器

在探http请求的更多相关文章

  1. 巧妙设备MTU的大小,轻松提网速

    MTU是什么? "MTU=最大传输单元 单位:字节" 我们在使用互联网时进行的各种网络操作,都是通过一个又一个"数据包"传输来实现的.而MTU指定了网络中可数据 ...

  2. 爬虫再探实战(四)———爬取动态加载页面——请求json

    还是上次的那个网站,就是它.现在尝试用另一种办法——直接请求json文件,来获取要抓取的信息. 第一步,检查元素,看图如下: 过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造request ...

  3. Android之EACCES (Permission denied)与Permission denied异常探密

    话说,Accipiter君,最近又开始怒学Android了,记得刚开始还是09年学的,现在的手机还是华为出的最早的一款Android手机C8500,那时候就想好好学习Android,赚点小钱,可是~~ ...

  4. 再探jQuery

    再探jQuery 前言:在使用jQuery的时候发现一些知识点记得并不牢固,因此希望通过总结知识点加深对jQuery的应用,也希望和各位博友共同分享. jQuery是一个JavaScript库,它极大 ...

  5. DIOCP 运作核心探密

    来自网友天地弦的DIOCP早已经广为人知了,有很多的同学都用上了它,甚至各种变异.修改版本也出了不少.我最近也在学习DIOCP,打算将它用于自己的服务端,今天让我们来一起探密它(DIOCP)的运作核心 ...

  6. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView

    本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...

  7. [老老实实学WCF] 第五篇 再探通信--ClientBase

    老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ...

  8. 再探ASP.NET 5(转载)

    就在最近一段时间,微软又有大动作了,在IDE方面除了给我们发布了Viausl Studio 2013 社区版还发布了全新的Visual Studio 2015 Preview. Visual Stud ...

  9. ASP.NET/MVC/Core的HTTP请求流程

    ASP.NET HTTP管道(Pipeline)模型 1. 先讲一点,再深刻思考 一般我们都在写业务代码,优化页面,优化逻辑之间内徘徊.也许我们懂得HTTP,HTTPS的GET,POST,但是我们大部 ...

随机推荐

  1. 基于Linux的Samba开源共享解决方案测试(二)

    单NAS网关50Mb码率视音频文件的稳定读测试结果如下: 50Mb/s负载性能记录 NAS网关资源占用 稳定读 稳定读 CPU空闲 内存空闲 网卡占用 13个稳定流 96.70% 10G 104MB/ ...

  2. python学习之----BeautifulSoup示例一

    BeautifulSoup 库最常用的对象恰好就是BeautifulSoup 对象. from urllib.request import urlopen from bs4 import Beauti ...

  3. zabbix_get无法执行agent端的脚本文件解决办法

    一,无法执行脚本参考网站:http://blog.51cto.com/13589448/2070180 权限不足时提示: server端提示: [root@yao local]# zabbix_get ...

  4. sql server自增列值的获取

    IDENT_CURRENT(tbname) 是看表对象.所以没有受作用域限制. SCOPE_IDENTITY()  受作用域限制.同一个会话里面不同作用域也会有差异 @@IDENTITY  受会话限制 ...

  5. MySQL Windows 安装与配置

    <01> 下载解压 MySQL 至 D盘, 将文件夹改名为 MySQL <02> 控制台状态下进入 MySQL/bin 目录 输入 mysqld -install  回车 安装 ...

  6. css之单边阴影

    css之单边阴影 需求:在网上找的其他博客上说单边阴影需要牺牲掉模糊,实际上牺牲掉模糊直接用border不就好了 效果: 原理: 1.在左边的外阴影就是右边的内阴影 2.将box-shadow写在be ...

  7. 制作keil5的pack

    [原创出品§转载请注明出处] 出处:http://www.cnblogs.com/libra13179/p/6273415.html 我在这里就交大家怎样制作自己的Pack,(这里是我制作好的http ...

  8. 5.log4j报错

    java.lang.UnsupportedClassVersionError: org/apache/log4j/Logger : Unsupported major.minor version 51 ...

  9. vi和vim的三种模式

    1.一般模式 用vi 或vim 命令 ——>一般模式 2. 插入模式 i,o,a,r 及其各自大写 ——>插入模式 一般用 i 3.命令行模式 用命令来完成 读取,存盘,替换,离开vim ...

  10. net send 换行和发送广播

    net send ip message 要换行的时候按ctrl+t.最后按enter 或 ctrl + m 发出 如果是批处理里面要用: 在命令行下使用:echo ^T > a.txt,注意这里 ...