在探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或请求体发送到服务器
在探http请求的更多相关文章
- 巧妙设备MTU的大小,轻松提网速
MTU是什么? "MTU=最大传输单元 单位:字节" 我们在使用互联网时进行的各种网络操作,都是通过一个又一个"数据包"传输来实现的.而MTU指定了网络中可数据 ...
- 爬虫再探实战(四)———爬取动态加载页面——请求json
还是上次的那个网站,就是它.现在尝试用另一种办法——直接请求json文件,来获取要抓取的信息. 第一步,检查元素,看图如下: 过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造request ...
- Android之EACCES (Permission denied)与Permission denied异常探密
话说,Accipiter君,最近又开始怒学Android了,记得刚开始还是09年学的,现在的手机还是华为出的最早的一款Android手机C8500,那时候就想好好学习Android,赚点小钱,可是~~ ...
- 再探jQuery
再探jQuery 前言:在使用jQuery的时候发现一些知识点记得并不牢固,因此希望通过总结知识点加深对jQuery的应用,也希望和各位博友共同分享. jQuery是一个JavaScript库,它极大 ...
- DIOCP 运作核心探密
来自网友天地弦的DIOCP早已经广为人知了,有很多的同学都用上了它,甚至各种变异.修改版本也出了不少.我最近也在学习DIOCP,打算将它用于自己的服务端,今天让我们来一起探密它(DIOCP)的运作核心 ...
- 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView
本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...
- [老老实实学WCF] 第五篇 再探通信--ClientBase
老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ...
- 再探ASP.NET 5(转载)
就在最近一段时间,微软又有大动作了,在IDE方面除了给我们发布了Viausl Studio 2013 社区版还发布了全新的Visual Studio 2015 Preview. Visual Stud ...
- ASP.NET/MVC/Core的HTTP请求流程
ASP.NET HTTP管道(Pipeline)模型 1. 先讲一点,再深刻思考 一般我们都在写业务代码,优化页面,优化逻辑之间内徘徊.也许我们懂得HTTP,HTTPS的GET,POST,但是我们大部 ...
随机推荐
- Oracle 学习SQL
开始记录最近学习了一些基础的SQL知识. 说起数据库,想到当时学习数据库概论这本书的时候,就学了一些基本的SQL语句以及数据库理论知识,记得最当时考试的数据库范式的知识,不知当时是怎么过来的,到现在对 ...
- solr .Net端(SolrNet)
首先 引用SolrNet.dll Microsoft.Practices.ServiceLocation HttpWebAdapters 也可以用.net IDe 中的 nuget下载 solrnet ...
- express无中间件的增删改查
index.js const express = require("express");导入express框架 const data = require("./data& ...
- JS 传各种文件到后端
由于要写一个前端上传文件按钮功能,本人前端是小白,所以在网上搜索了许多,发现FileReader非常好用. 不多BB,直接来. 1,前端只需要一个input标签, <input type=&qu ...
- Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0
Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0 环境 本教程使用 CentOS 6.4 32位 作为系统环境,请自行安装系统.如果用的是 Ubuntu 系统,请查 ...
- Web 跨域请求
在前端开发过程中,难免和服务端产生数据交互.一般情况我们的请求分为这么几种情况: 1. 只关注发送,不关注接收 2.不仅要发送,还要关注服务端返回的信息 a. 同域请求 ...
- bootstrap3中模态框的数据编辑使用方法
模态框是bootstrap3中比较好用得弹窗控件,这回使用了 说主要的,官方详细教程 http://www.runoob.com/bootstrap/bootstrap-modal-plugin.ht ...
- 7. myeclipse10反编译插件安装
- 在 html中怎么获取中的参数
参考:https://blog.csdn.net/xqhys/article/details/68486215 eg: window.location.href="/user/update? ...
- Java 9 模块化(Modularity)
JDK9的发布一直在推迟,终于在2017年9月21日发布了.下面是JDK9的几个下载地址: JDK9.0.1 Windows-x64下载地址 Oracle Java 官网下载地址 OpenJDK 9官 ...