你要知道的HTTP

前言

http的概念,我相信只要是搞互联网的都不陌生,好比说我,用http,用三方的开源库调调接口,通常人均可以很顺利作到,可是真正别人问我一些http实质性相关的一些东西的时候,每每就懵逼,更别谈参加面试了,既然这样,那就学习,记录吧。html

HTTP方法有哪些

http请求方法有五种:POST,GET,HEAD,PUT,DELETE,TRACE,OPTIONS,CONNECTweb

  • GET:向服务器发请求,但愿获得一些数据,通常作单向的获取数据,很简单。
  • POST:也是向服务器发送请求,这时候咱们是post一个表单,数据比较多,例如上传文件。
  • HEAD:和get差很少,只是返回的数据没有body,仅仅返回的是数据头部信息。一个典型的使用场景,就是当咱们要下载一个文件的时候先判断一下该文件的大小,这时候直接head一下就能够了。
  • PUT:add数据到服务器而且替换服务器中指定的资源。
  • DELETE:用于删除服务器指定的资源。
  • TRACE:显示服务器收到的请求信息,好比丢包率等,主要用于诊断和测试。

POST和GET比较

  • 请求数据传输方式不一样:GET是把请求信息放在url中,好比name,id等信息,POST是把包装在请求体中,通常是form的形式提交给服务器。
/books/?sex=man&name=Professional HTTP/1.1
复制代码

这就是一个get请求,咱们把一些数据信息直接放在url的后面。面试

  • 安全性不一样:POST请求的数据在请求的body里面,而GET请求的数据在URL中,咱们经过缓存就能够很容易拿到请求信息。
  • 数据类型不一样:GET请求只容许是ASCII字符,POST无限制。好比在请求数据的时候才有GET请求,查看URL当里面有中文的时候里面会出现不少%%%这种符号,这都是通过base64转换了的,由于get请求数据只能是ASCII字符,so。。。
  • 提交的数据长度不一样:GET提交的数据长度是有限制的(这个限制得看浏览器本身了),POST是表单,因此没有限制。
  • 特性:相对服务器来讲GET请求更加安全,这里的安全是指 1.幂等:客户端发送一次和发送屡次请求效果同样,不会形成服务器数据更改。 2,客户端发送的数据不会改变服务器的状态(咱们仅仅想获得数据,不会修改服务器数据),幂等是个很重要的概念,能够记住一下。

POST和PUT比较

这二者都是向服务器新增资源,区别在哪?最重要的区别就是幂等。PUT每每用于修改单一资源,而POST是向资源集合里面加数据。好比:我如今想修改我博客的头像为小猫,那么我就是发个请求,去修改头像小猫,哪怕你提交一万次,你的头像最后仍是小猫,这就是幂等;然而若是你想发一篇博客,那么你每次提交一次那文章确定是新增一篇咯,非幂等。浏览器

总结:PUT是幂等,POST是非幂,这也是二者最最重要的区别。
复制代码

请求消息Request

  • 请求行
  • 请求头部
  • 空行
  • 请求数据

看一个抓包数据缓存

GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept    image/webp,image/*,*/*;q=0.8
Referer    http://www.imooc.com/
Accept-Encoding    gzip, deflate, sdch
Accept-Language    zh-CN,zh;q=0.8
复制代码

1.请求行:包含请求类型GET,须要请求的资源/562f25980001b1b106000338.jpg,HTTP的版本号 2.请求头部:包含目的地址,使用的浏览器代理,编码等信息。 3.空行 4.请求数据:这里包含咱们的请求数据name,id啥的。 安全

响应消息Respone

  • 响应行
  • 响应头
  • 空行
  • 响应体

状态码

2XX 成功bash

  • 200 OK,表示从客户端发来的请求在服务器端被正确处理
  • 201 Created 请求已经被实现,并且有一个新的资源已经依据请求的须要而创建
  • 202 Accepted 请求已接受,可是还没执行,不保证完成请求
  • 204 No content,表示请求成功,但响应报文不含实体的主体部分
  • 206 Partial Content,进行范围请求

3XX 重定向服务器

  • 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
  • 302 found,临时性重定向,表示资源临时被分配了新的 URL
  • 303 see other,表示资源存在着另外一个 URL,应使用 GET 方法丁香获取资源
  • 304 not modified,表示服务器容许访问资源,但因发生请求未知足条件的状况
  • 307 temporary redirect,临时重定向,和302含义相同

4XX 客户端错误tcp

  • 400 bad request,请求报文存在语法错误
  • 401 unauthorized,表示发送的请求须要有经过 HTTP 认证的认证信息
  • 403 forbidden,表示对请求资源的访问被服务器拒绝
  • 404 not found,表示在服务器上没有找到请求的资源
  • 408 Request timeout, 客户端请求超时
  • 409 Confict, 请求的资源可能引发冲突

5XX 服务器错误post

  • 500 internal sever error,表示服务器端在执行请求时发生了错误
  • 501 Not Implemented 请求超出服务器能力范围,例如服务器不支持当前请求所须要的某个功能,或者请求是服务器不支持的某个方法
  • 503 service unavailable,代表服务器暂时处于超负载或正在停机维护,没法处理请求
  • 505 http version not supported 服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本

Keep-Alive干吗的

在http1.0时代,每次发送http请求都要经历tcp的握手建立链接,这种操做是很耗时的,也许传送数据的时间尚未建立链接的时间长,这种状况就得不偿失了,因此就有了Keep-Alive,它告诉http此次请求结束后暂时不要关闭链接,等待有后续数据传送直接利用现有链接就行。

HTTP工做原理--在浏览器地址栏键入URL,按下回车后的流程

  • 1.浏览器首先根据url解析dns服务器中对应的ip地址。
  • 2.根据ip地址和端口号,建立web链接。
  • 3.浏览器发送数据包给服务器。
  • 4.服务器根据数据包解析出数据,而后提取数据,定位资源,返回给客户端,而且释放资源。
  • 5.客户端拿到资源后,先判断是否正常返回,而后解析出对应的html数据。
  • 6,完毕,关闭资源。

HTTPS如何保证安全

https主要就是保证数据在链路上传播安全的,主要原理采用:对称加密+非对称加密+CA技术。奇怪了,为啥采用这么复杂的方式啊。咱们作个简单的总结性的分析:

  • 对称加密解密数据速度很快。
  • 非对称加密更加安全,可是效率不行。
  • CA就是第三方的认证,防止密钥被篡改。

https原理:加密解密真正的数据采用的是对称加密,可是对称加密的密钥(密钥A)通讯双方都是同样的,这是很不安全的,因此咱们采用了非对称加密对密钥A进行加密,此次加密仅仅是为了传输密钥A、只会传一次,因此效率问题能够忽略,至于CA技术嘛,要是第三方假冒了怎么办,这里就有个数字签名技术对CA作个认证咯,这样就相对很安全了。

相关文章
相关标签/搜索