HTTP协议

248 阅读5分钟

HTTP协议是超文本传输协议,是一个基于TCP/IP通信协议来传递数据。HTTP是一个属于应用层的面向对象的协议。

特点:

  • 简单快速:客户向服务器请求服务时,只需要传送请求方法和路径。请求方法常用的有:get、post、HEAD。每中方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标识
  • 无连接:限制每次连接只处理一个请求。服务器处理客户端的请求,并收到客户端的应答后,立即断开连接。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对事物处理没有记忆力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

HTTP之URL

HTTP使用统一资源标识符(URI)来传递数据和建立连接,URL是一种特殊的URI,包含了用于查询某个资源的足够的信息。

介绍:www.aspxfans.com:8080/news/index.…

一个完成的URL包括以下几部分:

  • 协议部分:该URL的协议部分为"HTTTP:" 这代表网页使用的是HTTP协议。在interner中可以使用多种协议,如HTPP、FTP协议。在"HTTP"后面的"//"为分隔符
  • 域名部分:该URL的域名部分为"www.aspxfans.com".
  • 端口部分:跟在域名后面的是端口8080,域名和端口之间使用":"作为分隔符。
  • 虚拟目录:从域名后的第一个"/"开始到最后一个"/"为止,是虚拟目录部分
  • 文件名部分:从域名后到最后一个"/"开始到"?" 为止,是文件名部分,如果没有"?",则从域名后的最后一个"/"开始到"#"为止,是文件部分,如果没有"?"和"#",那么从则的最后一个"/"开始结束,都是文件名部分。
  • 锚部分:从"#"开始到最后,都是锚部分
  • 参数部分: 从"?"到"#" 之间的部分为参数部分,参数与参数之间使用“&”作为分隔符

HTTP 请求消息Request

http请求消息包括以下格式: 请求行、请求头部、空行和请求数据四个部分组成。

请求行:

  • 请求方法,get、post
  • URL:请求资源的地址
  • 协议版本

HTTP 响应消息Response

HTTP响应也由4个部分组成,分别是:状态行、消息报头、空行和响应正文

  • 状态行:由HTTP协议版本号,状态码、状态消息三部分组成。
  • 消息报头:用来说明客户端要使用的一些附加信息
  • 空行:消息报头后面空行是必须的
  • 响应正文:服务器返回给客户端的文本信息

HTTP 状态码

状态码有三位数字组成,第一个数字定义了响应的类别,共五种类别

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

常见状态码:

  • 200 ok:客户端请求成功
  • 400 BadRequest:客户端请求语法错误,不能被服务器所理解
  • 401 Unauthorized:请求未授权,这个状态码必须和www-Authenticate报头一起使用
  • 403 Forbindden:服务器收到请求,但是拒绝提供服务
  • 404 NotFoud:请求资源不存在,输入了错误的URL
  • 500 :服务器发生不可预期的错误
  • 503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

HTTP请求方法

HTTP常用请求方法: get:请求指定的页面信息,并返回实体主体(获取资源) post:向指定资源提交数据进行处理请求。(例如提交表单或上传文件)post请求可能会导致新的资源的建立和已有资源的修改(提交或修改资源) head:类似get请求,只不过返回的响应中没有任何具体的内容,用于获取报头 put:从客户端向服务器传送的数据取代指定的文档的内容 deltet:删除给定的URL所标志的资源

get和 post请求的区别

  • get提交的数据会放在url之后,以“?”分隔URL和传输的数据,参数之间以&相连;post方法是把提交的数据放在http包的body中。

  • get 提交的数据大小有限制(因为浏览器多URL的长度有限制),而post方法提交的数据没有限制

  • get方法需要使用Request.queryString来获取变量的值,而post 方式通过Request.form来获取变量的值

  • get方式提交数据,会带来安全文隐患,比如一个登陆页面,通过get方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得用户的账号和密码