HTTP协议

一、首行

首行,包括了方法、UTL和版本号

方法,描述了这次请求想干什么.

但是事实上,这些方法的语义,都是"标准文档作者"的一厢情愿的

开发者在实际开发程序的时候,才不管这条.

完全可以用POST来从服务器拿数据,也完全可以用GET往服务器放数据.

GET是非常常见的

两个典型的使用POST的场景:1. 登录   2. 上传

从使用习惯上说,GET通常没有body,POST通常有body

GET会把需要给服务器的信息补充信息放到 query string中(URL)

POST会把这些信息放到body中.

GET和POST有什么区别

GET和POST本质上没有区别,使用GET或者POST的场景,完全可以替换成另一个.

这取决于你的代码是怎么写的,尤其是服务器的客户端都是你自己实现的情况下.

但是GET和POST在使用习惯上还是有区别的.

1. GET习惯于把数据放到URL的query string 中.POST习惯于把数据放到body中.

GET也可以把数据放到body   ->   有的服务器/浏览器可能不支持

POST也可以把数据放到query string 中   ->   绝大部分的服务器和浏览器都适用.

2. 语义上的区别.标准文档中,GET的语义是用来获取数据的,POST的语义是给服务器传输数据的.

3. 关于幂等性. 标准文档中,建议GET请求实现成幂等的,POST则无要求.

(每次输出的内容一定,为幂等,否则不是幂等)

4. GET请求是可以被浏览器收藏夹收藏的,POST请求不可以.

三个错误的说法

1. POST比GET更安全

论据:登陆的时候,如果使用GET,用户名密码就会显示在URL上,此时就会被别人直接看到,所以就不安全.

即使是POST,数据没有显示在URL,也是可以被黑客通过抓包获取到的.

真正保证安全性关键在于加密.

如果你数据加密了,就算放到URL显示又能怎样呢.

2. GET传输的数据量小(存在上限),POST传输的数据量更大

实际上HTTP标准文档上明确说了,对于GET URL的长度不做限制

3. GET只能携带文本数据,POST则可以携带二进制数据.

这个说法不能说是完全错误的,确实有一定的局限性.

URL通过query string 来携带载荷

query string 是只能包含文本的,但是可以对二进制数据进行urlencode,自然就成了文本了.

到了服务器自然进行urlencode,就能把二进制数据还原了.

POST请求body中也经常不是直接携带二进制

也有很多时候是对二进制数据进行 uelencode/base64 等方式进行转码.

HOST

UTL已经有host了,这里的host和url中的IP地址 端口 绝大部分是一样的,少数情况可能会不同.

Content-Length   ->   表示body中的数据长度   ->    通过这个长度来处理粘包问题,HTTP底层也是基于TCP.连续传输多个HTTP数据报,此时接收方这边的接收缓冲区里就会积累多个包的数据,应用程序在读取这些数据的时候,就需要明确包之间的边界.

Content-Type   ->   表示请求的body中的数据格式   

请求中:

1. application/json   ->   body就是json

2. application/x-www-from-urlencoded   ->   称为from表单,通过HEML中的from标签构造出来的一种格式,这个格式的特点,认为是把quert string 放到bod里了.

3. multipart/from-data   ->   上传文件时使用的.

响应中:

User-Agent

描述了操作系统信息,浏览器信息.

之前上网设备的差异非常大,就需要UA来识别使用的是什么电脑设备.

Referer

描述了当前这个页面从哪里来的.

Cookie

非常重要的报头中的属性.

Cookie本质上是一个,浏览器这边本地持久化存储数据的机制(数据要存到硬盘里)

浏览器作为电脑上的一个程序,能够直接读写本地的磁盘文件,但是浏览器禁止了打开的网页读写硬盘文件,为了电脑的安全性.

但是有些东西确实需要保存到浏览器这边,浏览器就提供了Cookie,能够有限度的存储数据,而不能随意的访问系统文件.

HTTP请求中,的Cookie字段,就是把本地存储的Cookie信息发送到服务器这边,HTTP响应中会有一个Set-Cookie字段,就是服务器告诉浏览器你要在本地保存哪些信息.

关于Cookie几个重要结论:

1. Cookie从哪里来?

服务器返回给浏览器的,通常都是首次访问/登录成功之后.

2. Cookie到哪里去.

Cookie会存储在浏览器本地主机的硬盘上,后续每次访问服务器都会带上Cookie.不同的客户端,保存的Cookie是不同的,即使是同一个主机,使用不同浏览器,Cookie大概率也不同.

3. Cookie中存什么.

键值对格式的数据,这里的内容都是程序员自定义的.和query string 一样外人无从理解.

4. Cookie在浏览器这边如何组织?

在硬盘本地保存,是按照不同的域名为维度分别存储.

5. Cookie的用途是什么?

用来在客户端保存数据.其中最主要的是保存用户的身份标识,服务器就可以通过标识来区分用户了.

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值