【Linux】HTTP协议

本文详细介绍了URL的基本概念,urlencode和urldecode的作用,以及http和https的区别,重点讲解了HTTP请求方法、状态码和常见的Header。还探讨了cookie的工作原理及其带来的安全问题,以及如何通过session技术来保护用户隐私和防止信息泄露。

目录

预备知识

认识url

urlencode和urldecode

http和https的区别

http request 和 http response

http request格式:

http reponse格式:

HTTP的请求方法

HTTP的状态码

HTTP常见Header

cookie文件 

cookie是什么

问题

解决方案


预备知识

认识url

平时我们俗称的“网址”就是url,url也就是统一资源定位符

‘ ?’后面可以带参,我们可以带上的动态数据,后面是KV键值对

urlencode和urldecode

        少量的情况,提交或者获取的数据本身可能包含url中特殊字符冲突的字符,要求BS双发进行编码(encode)和解码(decode), / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现。

比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。

转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4(不足4位直接处理),每2位做一位,前面加上%,编码成%XY。

例如 “+”被转义成 %2B
urldecode就是urlencode的逆过程,下面是一个url的encode和decode工具

http和https的区别

https:端口号443 https://www.baidu.com

http:端口号80 http://183.2.172.185

一、传输信息安全性不同

  • http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。
  • https协议:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。

二、连接方式不同

  • http协议:http的连接很简单,是无状态的。
  • https协议:是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。

三、端口不同

  • http协议:使用的端口是80。
  • https协议:使用的端口是443

http request 和 http response

http request格式:

        格式为:请求行,请求报头,空行,请求正文;

        请求行包含请求方法(GET、POST),然后以空格符为分隔符跟上请求的资源地址url与HTTP版本。

        请求报头每一行都是请求属性,以Key-Value的结构,以/r/n为换行符,其中包含一个请求正文的长度,以此来正确读取请求正文内容。

        请求报头和请求正文之间有一行空行,以正确分隔请求报头和请求正文。

        请求正文是我们要上传的内容,可以没有。具体如下图所示:

 

http reponse格式:

        格式为:状态行,响应报文,空行,响应正文,具体如下:

  • fiddler抓包 代理
  • Postman

HTTP的请求方法

最常用的是GET,POST;

如果我们要提交参数给我们的服务器,使用GET方法,提交的参数是通过url提交

HTTP的状态码

最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway) 

HTTP常见Header

  • Content-Type: 数据类型(text/html等)
  • Content-Length: Body的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
  • User-Agent: 声明用户的操作系统和浏览器版本信息;
  • referer: 当前页面是从哪个页面跳转过来的;
  • location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能

Cookie一般会带文件中的内容,用户名和密码,cookie文件有文件级和内存级

cookie文件 

cookie是什么

        cookie是网络服务器通过将其存储在网络浏览器上的小量信息来记住访客的特定信息。这些信息包括上次访问的位置、花费的时间或用户首选项(如样式表)。浏览器会将Cookie存储在RAM中,当访客关闭浏览器时,也会将这些信息存储在计算机的硬盘上。如下:

       Cookie往往是从服务器返回的数据,也可以是页面自己生成的,Cookie存储到浏览器所在主机硬盘上,并且是按照域名为维度来存储的,每个域名下可以存自己的cookie,彼此之间不影响。

        cookie文件分为内存级和文件级,它的存在提高了用户体验,但是他也存在一些安全问题。

问题

cookie文件的存在也造成了一些问题,如下:

  1. cookie被盗取的问题
  2. 个人私有信息泄露

解决方案

session技术(解决个人私有信息泄露的问题)

session+cookie 是基于http协议会话保持原理

一般客户端是不止一个的,我们需要将成千甚至上万个session文件管理起来,在实际应用中 ,是将这些session信息托管给Redis集群管理。

上述方法中,即使cookie文件被盗取,个人私有信息也不会被泄露,因为引入session技术的本质就是原本让浏览器本身自己维护的用户信息放到服务器维护。

PS:至于cookie文件被盗取的问题目前是解决不了的,但是我们session id是由服务器端统一管理分配的,服务器端可以将异地登陆的用户,删除其原有session id,让其重新登录。也就是说虽然我们无法彻底解决黑客冒用用户身份进行登录,但是服务器端可以通过对session id各种取消,修改,暂停等操作来达到控制客户端的目的。

GET和POST方法

GET和POST的区别

GET和POST没有本质区别,双方可以替换对方的场景,虽然没有本质区别,但是在使用习惯上,还是存在一些差异的。

1、GET经常是把传递给服务器的数据放到query string中,POST则是经常放到body中(使用习惯上最大的差别),当然这种情况,一般还是建议大家要遵守上述的约定俗称的习惯。

2、语义上的差异(虽然语义上HTTP的使用是比较混乱的,但是相比之下,GET和POST还是比较明确的)

  • GET大多数是用来获取数据
  • POST大多数还是用来提交数据(登录+上传)

其他可能的说法

1、get请求是幂等的,post请求不是幂等的,这不是绝对的。

幂等是输入相同的内容,输出的内容是固定的,不幂等的情况比如:搜狗的广告搜索。

get和post具体是否幂等,取决于代码实现,在RFC标准文档上建议get请i去实现成幂等的。

2、 GET请求被浏览器缓存,POST不可以被缓存

幂等性的延续,如果请求是幂等的,自然就可以缓存

3、 GET请求可以被浏览器收藏夹收藏,POST不能(收藏的时候可能会丢失body)

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值