zoukankan      html  css  js  c++  java
  • 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: 表示服务器当前很忙,暂时无法响应服务
  • 相关阅读:
    如何使用KVM 虚拟机安装RHEL7系统
    KVM虚拟机安装报错 KVM is not available
    Delphi读取不Word中不规则表格数据并转换成标准表格
    Delphi控制Excel输出上标示例
    动态设置和访问cxgrid列的Properties(转)
    PHP存储blob示例(转)
    visual studio code(vscode) 调试php(转)
    Node入门(转)
    ThinkPHP升级指导
    微信官方demo(php)
  • 原文地址:https://www.cnblogs.com/hanyan99/p/13889611.html
Copyright © 2011-2022 走看看