hppt协议 

点击查看http发展史

http版本(0.9 , 1.0  , 1.1  2.0 )


http协议的组成部分

1、协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在”HTTP”后面的“//”为分隔符

2、域名部分:该URL的域名部分为“www.yancat.top”。一个URL中,也可以使用IP地址作为域名使用

3、端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口80

4、虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5、文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.html”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6、锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7、参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
————————————————
原文链接:https://blog.csdn.net/ergouge/article/details/8185219


  1. http协议的主要特点
  2. http报文的组成部分
  3. http方法
  4. get和post的区别
  5. http状态码

http协议主要特点

无连接,无状态,简单快速,灵活

无连接: 连接一次之后就会断开,不会保持连接

无状态: 客户端和服务端是两种身份 ,第一次请求结束后, 就会断开, 而当第二次请求的时候,服务端并没有记住之前的转台, 所以服务端无法区别客户端是否是同一个身份

简单快速: http协议是通过url进行定位的, 所以任何资源都是可以通过url进行访问,所以简单快速

灵活: http惬意的头部有一个数据类型,通过http协议,就可以完成不同数据类型的传输


http报文的组成部分

请求报文:

  1. 请求行
  2. 请求头
  3. 空行
  4. 请求体

响应报文:

  1. 状态行
  2. 响应头
  3. 空行
  4. 响应体

请求报文包括


请求行: 包括请求方法 , 请求的url ,http协议和版本

请求头:请求头部由关键字/值对组成,每行一对

空行: 当服务器再解析请求头的时候 ,如果遇到空行, 则表明,后面的内容是请求体

请求体: 数据部分


常见的请求头:

  • text/html — html格式
  • text/plain — 纯文本格式
  • text/css — CSS格式
  • text/javascript — js格式
  • image/gif — gif图片格式
  • image/jpeg — jpg图片格式
  • image/png — png图片格式
  • application/x-www-form-urlencoded — POST专用:普通的表单提交默认是通过这种方式。form表单数据被编码为key/value格式发送到服务器。
  • application/json — POST专用:用来告诉服务端消息主体是序列化后的 JSON 字符串
  • text/xml — POST专用:发送xml数据

响应报文包括:


状态行: 状态行也由三部分组成:服务器HTTP协议版本,响应状态码,状态码的文本描述

响应头:

空行:

响应体:


概括:


http方法

  1. GET : 请求资源
  2. POST : 传输资源
  3. PUT: 更新资源
  4. DELETE: 删除资源
  5. HEAD : 获取报文首部

上述五种方法是面试常问的五种方法

get和post是问的比较多的(重点)

put和delete是实际开发中基本用不上的,因为很少去删除服务器端的东西

head获取报文的首部,会有用到


get和post的区别

  1. get在浏览器回退的时候是无害的, 而post会再次提交请求(重要)
  2. get产生的url地址是可以被收藏的,而post不可以
  3. get请求会被浏览器缓存,而post不会,除非手动设置(重要)
  4. get请求只能进行url编码,而post支持多种编码方式
  5. get请求参数会被完整保留在浏览器历史记录中,而posi的参数不会被保留(重要)
  6. get请求在url中传输的参数是有长度限制的,而post没有(l浏览器限制)
  7. 对参数的类型,get值接收ascll字符,而post没有限制
  8. post比get相对安全,因为get参数直接暴露在url上, 所有不能用于传输账号或者密码等敏感信息(重要)
  9. get参数通过url传递,post放在request body中传递

http状态码

状态码分为五类

  • 1xx : 指示信息 – 表情请求已经接受,继续处理
  • 2xx : 成功 – 表示请求已被成功接受
  • 3xx : 重定向 – 要先完成请求必须进行更进一步的操作
  • 4xx : 客户端错误 – 请求有语法错误或者请求无法实现
  • 5xx : 服务器错误 – 服务器未能实现合法的请求

具体的状态码分类 : 点击这里


常见状态码:

  • 200 请求成功
  • 301 永久重定向
  • 302 临时重定向
  • 304 服务器告诉客户端,有缓存了, 不需要重新下载
  • 400 客户端请求有语法错误,不能被服务器所理解
  • 401 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
  • 403 请求页面的访问被禁止
  • 404 资源不存在
  • 500 服务器发生不可预期的错误。
  • 503 服务器当前不能处理客户端的请求,一段时间后可能恢复正常,

本文章大部分的理解来自  https://github.com/qianguyihao/Web 的http文章中, 而我再在他的基础上进行了一些查漏补缺,并且把我认为暂时用不上的的删除重新整理了一份