HTTP 协议对应 Web 开发者来说都必须要了解的,无论技术背景或首选编程语言是什么,"请求-响应" 对话是驱动 Web 上通信的基础。

HTTP 概述

HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写。通常,由 HTTP 客户端发起一个请求,创建一个到服务器指定端口(默认是 80 端口)的 TCP 连接。HTTP 服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如 "HTTP/1.1 200 OK" ,以及返回的内容,如请求的文件、错误消息、或者其它信息。

平时我们在浏览器上输入网址,按回车就能浏览网页内容。这过程中主要分为两个部分 “请求” (浏览器向服务器发送的消息) 和 “响应” (服务器将处理结果返回给浏览器)。

HTTP 请求

HTTP 请求分为四格部分:请求行, 请求头, 空行, 请求主体,下面直接给出一个示例:

GET /hello.txt HTTP/1.1
Host: www.example.com

上示例中第一行为请求行,第二行为请求头,末尾有一个空行(即空行,必须要有)。

  • 请求行包含:请求方法, 请求资源, 协议版本

    常见的请求方法有 GET POST HEAD

    协议版本有 0.9, HTTP/1.0, HTTP/1.1

  • 在 HTTP/1.1协议中,所有的请求头,除 Host 外,都是可选的。点击 HTTP头字段 了解更多头字段。下面给出常用的请求头:

host:请求的域名,必须要有
accept-encoding:可以接受的编码类型(不是字符编码,指的是文件格式)
connection:连接方式,1.0版本close,1.1版本keep-alive
accept-language:可以接收的语言类型
cookie:之前由服务器通过 Set-Cookie 发送的一个超文本传输协议 Cookie
user-agent:客户端信息
content-length:表示的请求体的长度,单位是字节

HTTP 响应

HTTP 响应分为四个部分:状态行, 响应头, 空行, 消息体(响应内容) 示例:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain Hello World! My payload includes a trailing CRLF.

上示例中第一行为状态行,第二行至第九行处为响应头,第十行为空行,最后一行为消息体。

  • 状态行包含:协议版本, 状态码, 状态描述。其中有关状态码更多的介绍可移步阅读 HTTP状态码

  • 响应头更多信息可点击上文中的 “HTTP头字段” 链接查看。下面给出常见的响应头:

server:服务器信息
date:服务器响应的时间
last-modified:当前请求文件最后被修改的时间
content-length:响应体的数据长度,单位是字节
content-type:响应体的类型
location:重定向
cache-control:缓存控制

其中一个重要的 HTTP 响应头 Content-Type 服务器上的每个资源都可以以不同的格式返回给客户端,如 HTML、XML 或 JSON 等;通过在 Content-Type 里设置如 text/html 这样的互联网媒体类型,可以告知客户端,服务器给出的响应格式是什么。常用的媒体类型可移步阅读 互联网媒体类型

拓展知识

HTTP 长连接说明,还有文中提到的“TCP\IP三次握手连接”

其中还有长轮询、服务器发送事件、WebSocket等知识点都与 HTTP 相关,在这就不拓展开了,读者可自行谷歌

相关阅读

HTTP 协议的更多相关文章

  1. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  2. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  3. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  4. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  5. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  6. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...

  7. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  8. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  9. linux-图形化远程管理协议

    远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...

  10. RTP与RTCP协议介绍(转载)

    RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...

随机推荐

  1. TokuDB性能测试报告

    一 .背景介绍 近年来,TokuDB作为MySQL的大数据(Big Data)存储引擎受到人们的普遍关注.其架构的核心基于一种新的叫做分形树(Fractal Trees)的索引数据结构,该结构是缓存无 ...

  2. Java面试10|数据库相关

    1.ID分配单点问题 系统使用一张表的自增来得到订单号,所有的订单生成必须先在这里insert一条数据,得到订单号.分库后,库的数量变多,相应的故障次数变多,但由于单点的存在,故障影响范围并未相应的减 ...

  3. java基础之基础语法详录(一)

    [前言] java的语法先从基础语法学,Java语言是由类和对象组成的,其对象和类又是由方法和变量组成,而方法,又包含了语句和表达式. 对象:(几乎)一切都是对象,比如:一只熊猫,他的外观,颜色,他在 ...

  4. 关于EasyUI 1.5版Datagrid组件在空数据时无法显示"空记录"提示的BUG解决方法

    问题:jQuery easyUI中Datagrid,在表格数据加载无数据的时候,如何显示"无记录"的提示语? 解决jQuery EasyUI 1.5.1版本的Datagrid,在处 ...

  5. iOS回顾笔记(07) -- UITableView的使用和性能优化

    iOS回顾笔记(07) -- UITableView的使用和性能优化 如果问iOS中最重要的最常用的UI控件是什么,我觉得UITableView当之无愧!似乎所有常规APP都使用到了UITableVi ...

  6. java学习笔记 --- String类

    一.定义 就是由多个字符组成的一串数据.也可以看成是一个字符数组. 注意: 1.字符串是常量:它们的值在创建之后不能更改.为什么? 意思就是说字符串确定了,就会在常量池中生成这个字符串. 所以说它的值 ...

  7. ECMASCRIPT5新特性(转载)

    Function 1: Object.create 这是一个很重要的改动,现在我们终于可以得到一个原型链干净的对象了.以前要创建一个类 function Cat(name) { this.name   ...

  8. 《HelloGitHub》第12期

    <HelloGitHub>第12期 兴趣是最好的老师,<HelloGitHub>就是帮你找到兴趣! 简介 最开始我只是想把自己在浏览 GitHub 过程中,发现的有意思.高质量 ...

  9. 自适应滤波:奇异值分解SVD

    作者:桂. 时间:2017-04-03  19:41:26 链接:http://www.cnblogs.com/xingshansi/p/6661230.html 声明:欢迎被转载,不过记得注明出处哦 ...

  10. 关于ng的路由的几点想法(ui-view)

    在配置路由的时候,我们可以选择ng框架自带的路由,也可以使用第三方路由插件ui-router 注意: (1)在使用angular-ui-router的时候,必须先引入angular-ui-router ...