超文本传输协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议。它被设计用于Web浏览器和Web服务器之间的通信,但它也可以用于其他目的。 HTTP遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。 HTTP是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。

HTTP 的特性

  • HTTP 协议构建于 TCP/IP 协议之上,是一个应用层协议,默认端口号是 80

  • HTTP 是可扩展的,在 HTTP/1.0 中出现的 HTTP headers 让协议扩展变得非常容易。

  • HTTP 是无连接无状态的,注意,HTTP本质是无状态的,使用Cookies可以创建有状态的会话。

请求报文

  请求由以下元素组成:

  • 一个HTTP的method,经常是由一个动词像GET,POST 或者一个名词像OPTIONS,HEAD来定义客户端的动作行为。通常客户端的操作都是获取资源(GET方法)或者发送HTML form表单值(POST方法)。

  • 要获取的资源的路径,通常是上下文中就很明显的元素资源的URL,(HTTP一般在80端口)。

  • HTTP协议版本号。

  • 为服务端表达其他信息的可选头部headers。

  • 对于一些像POST这样的方法,报文的body就包含了发送的资源,这与响应报文的body类似。

响应报文

  响应报文包含了下面的元素:

  • HTTP协议版本号。

  • 一个状态码(status code),来告知对应请求执行成功或失败,以及失败的原因。

  • 一个状态信息,这个信息是非权威的状态码描述信息,可以由服务端自行设定。

  • HTTP headers,与请求头部类似。

  • 可选项,比起请求报文,响应报文中更常见地包含获取的资源body。

常见的状态码:

  • 200 OK 客户端请求成功

  • 301 Moved Permanently 请求永久重定向

  • 302 Moved Temporarily 请求临时重定向

  • 304 Not Modified 文件未修改,可以直接使用缓存的文件。

  • 400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。

  • 401 Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用

  • 403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因

  • 404 Not Found 请求的资源不存在,例如,输入了错误的URL

  • 500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。

  • 503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

HTTPS与HTTP的一些区别

  • HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。

  • HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。

  • HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

  • HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。

最新文章

  1. 利用nodejs的cheerio抓取网站数据
  2. PHP 系列:PHP Web 开发基础
  3. java UUID
  4. UML建模的要点总结
  5. play framework 框架安装及myeclipse 导入项目
  6. PHP 统计中文字符串的长度
  7. LayoutInflater中四种类型inflate方法的介绍
  8. python的urllib2库详细使用说明
  9. MapReduce按照两个字段对数据进行排序
  10. request.getAttribute( "result");和request.setAttribute("result",username);
  11. 腾讯云数据库团队:phpMyAdmin中sql-parser组件的使用
  12. GDAL1.11版本对SHP文件索引加速测试
  13. request.getRequestDispatcher跳转jsp页面失败
  14. bzoj2982: combination(lucas定理板子)
  15. adb 命令 链接 安装应用
  16. HanLP二元核心词典详细解析
  17. 用Monitor简单3步监控中间件ActiveMQ
  18. 马尔可夫毯(Markov Blanket)
  19. 【转】基于R语言构建的电影评分预测模型
  20. Java50道经典习题-程序1 不死神兔

热门文章

  1. MySQL:由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题
  2. sqlalchemy insert on duplicate update
  3. JAVA学习(六)
  4. [cf720D]Slalom
  5. [atAGC029F]Construction of a tree
  6. 测试平台系列(82) 解决APScheduler重复执行的问题
  7. 7.5 实现基于探针对pod中的访问的健康状态检查
  8. 文本分类:Keras+RNN vs传统机器学习
  9. 洛谷 P6177 - Count on a tree II/【模板】树分块(树分块)
  10. Atcoder Grand Contest 054 题解