HTTP请求

HTTP请求和响应

请求报文

  • 组成:
    请求行(request line)
    请求头部 ( header )
    空行
    请求数据
  • 请求报文图
    request.png
  • 请求行
    请求行分为三个部分:请求方法、请求地址、协议版本
    1、请求方法
    根据HTTP标准,HTTP请求可以使用多种请求方法。
    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法
    方法如图所示:
    request-line.jpg

    2、请求地址
    URI Uniform Resource Identifier 统一资源标识符
    URL Uniform Resource Locator 统一资源定位符
    格式如下: scheme://[username:password@]HOST:port/path/to/source
    http://www.baidu.com
    URN Uniform Resource Name 统一资源名称
    URL和URN 都属于 URI
    为了方便就把URL和URI暂时都通指一个东西
    URL组成:<协议>://<主机>:<端口>/<路径>
    端口和路径有时可以省略(HTTP默认端口号是80)
    如下:
    request-url.png

    3、协议版本
    协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
  • 请求头部
    请求头部为请求报文添加了一些附加信息,由“名:值”对组成,每行一对,名和值之间使用冒号分隔。
    请求头主要存放客户端想给服务端的附加信息。

    请求头如下:
    request-header.jpg

    字段解释:
请求头 说明
Host 接受请求的服务器地址,可以是IP端口号,也可以是域名
User-Agent 发送请求的应用程序名称,一般情况是浏览器,也有其他类型
Accept 就是告诉服务器端,客户端接受那些MIME类型,服务端知道客户端所能接收的数据类型,如text/htm
Accept-Language 通知服务端可以发送的语言
Accept-Encoding 通知服务端可以发送的数据压缩格式
Accept-Charset 通知服务端可以发送的编码格式
Keep-Alive
Connection 指定与连接相关的属性,如Connection:Keep-Alive
cookie 每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端
If-Modified-Since 是浏览器向服务器端询问某个资源文件如果自从什么时间修改过,那么重新发给我,这样就保证服务器端资源文件更新时,浏览器再次去请求,而不是使用缓存中的文件
Content-Length body的长度,如果body为空则该字段值为0。该字段一般在POST请求中才会有。
Content-Type body中的数据类型,如application/json; charset=UTF-8

什么是MIME(多用途互联网邮件扩展)?
是一个互联网标准,遵循以下格式:major/minor 主类型/次类型,例如:image/jpg、image/gif、text/html
注意:
请求头部的最后会有一个空行,表示请求头部的结束,接下来为请求数据

  • 请求数据
    Get请求就没有请求数据

    如图为POST方法的请求报文
    request-post.jpg

HTTP响应报文

  • 组成
    状态行
    响应头部
    空行
    响应正文

    如图所示:
    response.png

    1、状态行
    包括:协议版本,状态码,状态码描述
    其中协议版本和请求报文一致,状态码为3位数字,如下:
    1xx:指示信息--表示请求已接收,继续处理。
    2xx:成功--表示请求已被成功接收、理解、接受

    3xx:重定向--要完成请求必须进行更进一步的操作。
    4xx:客户端错误--请求有语法错误或请求无法实现。
    5xx:服务器端错误--服务器未能实现合法的请求。
    2、响应头部
    与请求头部类似,为响应报文添加附加信息
    常见响应头如下:

响应头 说明
Server 服务器应用程序软件的名称和版本
Content-Type 响应正文的类型,是图片还是二进制字符串
Content-Language 响应正文使用的语言
Content-Encoding 响应正文使用的数据压缩格式
Content-Charset 响应正文使用的编码格式
Content-Length 响应正文长度
Date 响应的日期

3、响应数据

用于存放需要返回给客户端的数据信息
responst-data.jpg

HTTP、Socket、TCP的区别

首先看下这三者在TCP/IP协议中的位置关系:

图片来自网络:
HTTP-Socket-TCP.jpg

解析图片:

HTTP是应用层的协议,更靠近用户端;
TCP是传输层的协议;
而socket是从传输层上抽象出来的一个抽象层,本质是接口。

解疑答惑:
1、TCP连接与HTTP连接的区别

HTTP是基于TCP的,客户端往服务端发送一个HTTP请求时第一步就是要建立与服务端的TCP连接,也就是先三次握手,“你好,你好,你好”。从HTTP 1.1开始支持持久连接,也就是一次TCP连接可以发送多次的HTTP请求。

小总结:HTTP基于TCP

2、TCP连接与Socket连接的区别

socket层只是在TCP/UDP传输层上做的一个抽象接口层,因此一个socket连接可以基于TCP连接,也有可能基于UDP。
基于TCP协议的socket连接同样需要通过三次握手建立连接,是可靠的;
基于UDP协议的socket连接不需要建立连接的过程,不过对方能不能收到都会发送过去,是不可靠的,大多数的即时通讯IM都是后者。

小总结:Socket也基于TCP

3、HTTP连接与Socket连接的区别

HTTP是短连接,Socket(基于TCP协议的)是长连接。尽管HTTP1.1开始支持持久连接,但仍无法保证始终连接。而Socket连接一旦建立TCP三次握手,除非一方主动断开,否则连接状态一直保持。
HTTP连接服务端无法主动发消息,Socket连接双方请求的发送先后限制。这点就比较重要了,因为它将决定二者分别适合应用在什么场景下。
HTTP采用“请求-响应”机制,在客户端还没发送消息给服务端前,服务端无法推送消息给客户端。必须满足客户端发送消息在前,服务端回复在后。Socket连接双方类似peer2peer的关系,一方随时可以向另一方喊话。

4、什么时候该用HTTP,什么时候该用socket

用HTTP的情况:双方不需要时刻保持连接在线,比如客户端资源的获取、文件上传等。
用Socket的情况:大部分即时通讯应用(QQ、微信)、聊天室、苹果APNs等

TCP的三次握手

如图:
TCP握手.jpg

解析如下:
1、Client首先发送一个连接试探,这时候Client进入syn_sent状态,表示客户端等待服务器的回复。

ACK=0 表示确认号无效,
SYN = 1 表示这是一个连接请求或连接接受报文,同时表示这个数据报不能携带数据,
seq = x 表示Client自己的初始序号(seq = 0就代表这是第0号包),

2、Server监听到连接请求报文后,如同意建立连接,则向Client发送确认。这时服务器进入syn_rcvd,表示服务器已经收到Client的连接请求,等待client的确认。

TCP报文首部中的SYN 和 ACK都置1 ,
ack = x +1表示期望收到对方下一个报文段的第一个数据字节序号是x+1,同时表明x为止的所有数据都已正确收到
(ack=1其实是ack=0+1,也就是期望客户端的第1个包),seq= y 表示Server自己的初始序号(seq=0就代表这是服务器这边发出的第0号包)。

3、Client收到确认后还需再次发送确认,同时携带要发送给Server的数据。一旦收到Client的确认之后,这个TCP连接就进入Established状态,就可以发起http请求了。

ACK 置1 表示确认号ack= y + 1有效(代表期望收到服务器的第1个包),
Client自己的序号seq= x +1(表示这就是我的第1个包,相对于第0个包来说的)

浏览器地址栏输入url,看到页面的过程

域名解析--> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 -->服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)--> 浏览器对页面进行渲染呈现给用户

来自网络详情见:
http://www.jianshu.com/p/a6a63e56a203

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,653评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,321评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,833评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,472评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,306评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,274评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,658评论 3 385
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,335评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,638评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,697评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,454评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,311评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,699评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,986评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,254评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,647评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,847评论 2 335

推荐阅读更多精彩内容