WEB基础--HTTP协议整理

参考《Netty权威指南2》

      申明:此篇博客仅仅是为了自己学习和记忆使用,如有侵权,请联系删除

1.1 HTTP协议定义&介绍

        HTTP协议(超文本传输协议)是建立在TCP传输协议的上的应用层协议。

       HTTP协议具有以下特点:

  • 支持Client/Server 模式
  • 简单--客户向服务器请求服务时,只需指定服务的URL,携带必要的请求参数或者消息体
  • 灵活--HTTP允许传输任意类型的数据对象,传输的内容类型由HTTP消息头中的Content-Type加以标记
  • 无状态---HTTP协议是无状态协议,无状态是指:协议对于事务处理没有记忆能力。缺少状态意味着后续处理需要之前的信息,则它必须重传,这样可能导致每次连接传输的数据量增大。另一方面,如果服务器不需要之前的信息时,他的应答比较快,负载较轻

1.2 HTTP协议的URL

       HTTP URL (URL 是一种特殊类型的URI,包含了查找某个资源的足够信息)的格式如下:

http:// host[":"port] [abs_path]

    说明:

  • http 是具体的协议类型,http表示需要使用Http协议来定位网络资源
  • host 表示合法的主机的IP地址或者域名
  • port 表示主机的端口,为空的话,默认是使用80端口
  • abs_path 指定请求资源给的URI,如果没有abs_path ,那么它作为URI时,必须以"/"结尾,这点浏览器会帮助我们自动完成

1.3 HTTP请求消息

       HTTP 请求包含以下三部分:

  • HTTP 请求行

    请求行以一个方法付开头,以空格分开,后面跟着请求的URI和协议版本,格式为:

    Method    Request-URI    HTTP-Version CRLF

    例子:如GET   请求      http://www.test.com/login

    请求行:   GET  /login   HTTP/1.1

     其中Method包含以下类型:

  1.  GET:请求获取Request-URI所3标识的资源

  2.  POST:在Request-URI所标识的资源后附加新的提交数据

  3. HEAD:请求获取Request-URI 所标识的资源的响应消息报头

  4. PUT:请求服务器存储一个资源,并用Request-URI作为其标识

  5. DELETE:请求服务器删除Request-URI标识的资源

  6. TRACE: 请求服务器回送收到的请求消息,主要用于诊断或者测试

  7. CONNECT:保留将来使用

  8. OPTIONS:请求查询服务器性能,或者查询与资源相关的选项和需求

    GET和POST区别

  1. POST方法要求被请求服务器接受附在请求后面的数据,常用于表单的提交
  2. GET一般用于获取/查询 资源信息,而POST一般用于更新数据信息
  3.  根据HTTP规范,GET用于信息的获取,而且应该是安全和幂等的,而POST则表示可能改变服务器上的资源请求。
  4. GET提交,请求参数会附在URL之后,就是把参数放置在参数行中,以“?”分隔URL和传输数据,多个参数以“&”连接;而POST提交会把提交的参数放置在HTTP的包体之中,数据不会在地址栏中显示出来。
  5. 传输的数据大小不同。特定的浏览器和对应的服务器对URL的长度有限制,例如:IE对URL的长度限制是2083字节(2KB+35B),因此携带的参数长度会受到浏览器的限制;而POST不通过URL传递参数,理论上数据长度不会受限制。
  6. 安全性。POST安全性要比GET更高。比如通过GET提交数据,用户将用户名和密码都出现在URL上,1)登录页面被浏览器缓存了;2)其他人查看浏览器历史记录,那么别人可能拿到你的账号和密码了。除此之外,GET提交数据可能还会造成Cross-site request forgery(跨站请求伪造)攻击,而POST不存在上述安全问题。
  • HTTP 请求头

部分请求头消息如下:

           名称                                                                       作用
Accept

用于指定客户端接受哪些类型的信息

例如:Accept : image/gif    表明客户端希望接收gif的图片资源

Accept-Charset

用于指定客户端接受的字符集。

例如:Accept-CHarset:ios-8895-1,gb2312,如果在请求消息中,没有设置这个域,默认是任何字符集都可以接受

Accept-Encoding

类似于Accept,但是它用于指定可接受的内容编码

例如:Accept-Encoding:gzip.deflate,如果在请求消息中没有设置这个域,则服务器假定客户端可以接受各种内容编码

Accept-Language

类似于Accept,但是它用于指定一种自然语言

例如:Accept-Language:zh-cn   如果消息中没有设置这个报头域,则服务器假定客户端对各种自然语言都可以接受

Authorization 主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果接受到服务器的响应代码为401(未授权),可以发送一个包含Authorization的请求报头域的请求,要求服务器对其进行认证
Host 发送请求时,该报头域时必须的,用于指定被请求资源的Internet主机和端口号,它通常是从HTTP url中取出来的
User-Agent 允许客户端将他的操作系统、浏览器和其他属性告诉服务器
Content-Length 请求消息的长度
Content-Type

表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显示地指定为text/html。

由于经常设置Content-Type,因此HttpServletReponse提供了一个方法setContentType

Connection 连接类型,通常是keep-alive
  • HTTP 请求正文(请求体)

HTTP响应消息

    响应消息分为3部分

  • 状态行

       状态行格式为:  HTTP-Version   Status-Code Reason-Parase  CRLF

       HTTP-Version:表示服务器HTTP协议的版本

       Status-Code: 表示服务返回的响应状态码,状态码有三位数字组成,第一个数字表示响应消息的类别,有五种可能取值。

  1. 1xx:指示信息。表示请求已经接收,继续处理
  2. 2xx:  成功。 表示该请求已经被成功接收,理解,接受
  3. 3xx:  重定向。要完成请求必须进一步操作
  4. 4xx:  客户端错误。请求又语法错误    或者请求无法实现
  5. 5xx:服务器错误。服务器端未能处理请求

常见的状态码及含义

      状态码                                                                            含义
     200

OK: 客户端请求成功

    304 未修改,上次返回的数据没做任何修改,服务器也不会返回数据
   400 Bad Request: 客户端请求有语法错误,不能被服务器所理解
   401 Unauthorized: 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    403 Forbidden:服务器接收到请求,但拒绝服务
    404 Not Fund: 请求资源不存在
   500 Internal Server Error: 服务器发生不可预期错误
   503 Server Unavilable: 服务器当前不能处理客户端请求,一段时间后可能恢复正常
   504 (网关超时)  服务器作为网关或代理,但是没有及时从上游服务器收到请
  • 消息报头

常用的响应报头

      名称                                                                         作用
   Location 用于重定向接收者到一个新位置,Location响应报头域常用于更换域名的时候
  Server 包含了服务器用来处理请求的软件信息,与User-Agent请求报头域是相对应的
WWW-Authenticate 必须包含在401(未授权的)响应消息中,客户端收到401消息,并发送Authorization报头域请求服务器对其进行验证,服务端响应报头就包含该报头域
  • 响应正文

你可能感兴趣的:(web)