HTTP

HTTP

HTTP

什么是HTTP

HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议

HTTP的特点

  • 支持B/S模式
  • 简单快速,由于HTTP协议简单,使得HTTP服务器的程序规模小,通信速度快
  • 灵活,http允许传输任意类型的数据 对象,正在传输的类型由Content-type加以标记
  • 无连接,每次连接只处理一个请求 服务器四次分手之后即断开连接
  • 无状态 http协议是无状态协议 即对于事务处理没有记忆能力

结构

header+body的结构 具体而言: 请求行/状态行 + 请求头/响应头 + 空行 + 请求体/响应体

请求行/状态行

  • 请求报文
//请求行: 请求方法+路径+http版本  
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1 
POST /search HTTP/1.1  
  • 响应报文
//状态行: http协议的版本+状态码+状态码的文本描述 
HTTP/1.1 200 OK

HTTP协议的请求方法

有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT 常见的是GET和POST

  • GET
    • 当客户端要从服务器中读取文档时会使用GET方法,传递的参数会拼接在URL后面以?衔接,俗称查询字符串(queryString),参数长度受限制,因为参数是拼接在URL后面,所以GET请求没有请求体
//GET请求报文:
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1   //请求行
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,   //请求头
application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>  
Accept-Language: zh-cn  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
Host: <a href="http://www.google.cn">www.google.cn</a>  
Connection: Keep-Alive  
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r 
  • POST
    • 当客户要向服务器插入或者更新数据会使用POST方法,传递的参数会在请求体里面 大小不受限制
//POST请求报文:
POST /search HTTP/1.1    //请求行
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,   //请求头
application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>  
Accept-Language: zh-cn  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
Host: <a href="http://www.google.cn">www.google.cn</a>  
Connection: Keep-Alive  
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r  

hl=zh-CN&source=hp&q=domety    //请求体
  • GET和POST的区别
    • GET请求没有请求体; POST请求有请求体
    • GET请求的参数放在URL中发送 大小有限制; POST请求的参数可以放在URL后传递 也可以放在请求体中,放在请求体中大小不受限制
    • GET参数明文,数据会被浏览器缓存,安全性较差; POST请求相对安全,通过抓包工具也是可以抓取到数据的,所以重要数据最好是加密传输
    • GET设计用来查询,参数量小; POST设计用来插入,更新数据,安全要求高,数据量大
    • GET像轿车能送货,速度快但能力有限; POST像货车,有货箱(请求体),运输量大且安全性高
    • 传输的数据,GET像拿在手上,POST像放在荷包中
    • GET像没有信纸,只有信访的信

请求头/响应头

请求/响应头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的头部有:

  • Accept:请求的对象类型。如果是“/”表示任意类型,如果是指定的类型,则会变成“type/”
  • Accept-Language: 使用的语言种类
  • Accept-Encording:页面编码种类
  • Accept-Charset:页面字符集
  • User-Agent:提供了客户端浏览器的类型和版本。
  • Host:连接的目标主机,如果连接的服务器是非标准端口,在这里会出现使用的非标准端口
  • Connection:对于HTTP连接的处理,keep-alive表示保持连接,如果是在响应报文中发送页面完毕就会关闭连接,状态变为close。
  • server表示服务器软件版本
  • date标注了当前服务器的时间
  • content-type表示了应答请求后返回的内容类型

空行

用来区分开头部实体

请求体/响应体

就是具体的数据了 也就是body部分,请求报文对应请求体,响应报文对应响应体

状态码

分类

  • 1xx: 表示目前是协议处理的中间状态,还需要后续操作。
  • 2xx: 表示成功状态。
  • 3xx: 重定向状态,资源位置发生变动,需要重新请求。
  • 4xx: 请求报文有误。
  • 5xx: 服务器端发生错误。

1xx 常见状态码

  • 101 Switching Protocols。在HTTP升级为WebSocket的时候,如果服务器同意变更,就会发送状态码 101

2xx 常见状态码

  • 200 OK是见得最多的成功状态码。通常在响应体中放有数据。
  • 204 No Content含义与 200 相同,但响应头后没有 body 数据。
  • 206 Partial Content顾名思义,表示部分内容,它的使用场景为 HTTP 分块下载和断电续传,当然也会带上相应的响应头字段Content-Range。

3xx 常见状态码

  • 301 Moved Permanently即永久重定向
  • 302 Found,即临时重定向
    比如你的网站从 HTTP 升级到了 HTTPS 了,以前的站点再也不用了,应当返回301,这个时候浏览器默认会做缓存优化, 在第二次访问的时候自动访问重定向的那个地址,而如果只是暂时不可用,那么直接返回302即可,和301不同的是,浏览器并不会做缓存优化
  • 304 Not Modified: 当协商缓存命中时会返回这个状态码

4xx 常见状态码

  • 400 Bad Request: 开发者经常看到一头雾水,只是笼统地提示了一下错误,并不知道哪里出错了。
  • 401 身份验证错误,此页要求授权
  • 403 Forbidden: 这实际上并不是请求报文出错,而是服务器禁止访问,原因有很多,比如法律禁止、信息敏感。
  • 404 Not Found: 资源未找到,表示没在服务器上找到相应的资源。
  • 405 Method Not Allowed: 请求方法不被服务器端允许。
  • 406 Not Acceptable: 资源无法满足客户端的条件。
  • 408 Request Timeout: 服务器等待了太长时间。
  • 409 Conflict: 多个请求发生了冲突。
  • 413 Request Entity Too Large: 请求体的数据过大。
  • 414 Request-URI Too Long: 请求行里的 URI 太大。
  • 429 Too Many Request: 客户端发送的请求过多。
  • 431 Request Header Fields Too Large请求头的字段内容太大。

5xx 常见状态码

  • 500 Internal Server Error: 仅仅告诉你服务器出错了,出了啥错咱也不知道。
  • 501 Not Implemented: 表示客户端请求的功能还不支持。
    502 Bad Gateway: 服务器自身是正常的,但访问的时候出错了,啥错误咱也不知道。
    503 Service Unavailable: 表示服务器当前很忙,暂时无法响应服务
posted @ 2020-10-28 10:32  程序员小韩  阅读(147)  评论(0编辑  收藏  举报