HTTP Request 请求

HTTP Request

在HTTP连接中消息报文分为Request请求和Response响应两种,每种报文在HTTP首部会有不同的字段来标识不同的用途。

HTTP协议使用TCP协议进行传输,在应用层协议发起交互之前,首先是TCP的三次握手。完成TCP三次握手后,客户端会向Web服务器发出一个请求报文。

典型的HTTP请求消息格式

HTTP请求消息结构
  • 请求方法:GET
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    www.hostname.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept    image/webp,image/*,*/*;q=0.8
Referer    www.hostname.com
Accept-Encoding    gzip, deflate, sdch
Accept-Language    zh-CN,zh;q=0.8
  • 请求方法:POST
POST / HTTP1.1
Host:www.hostname.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

客户端发送的HTTP请求到Web服务器时,请求消息主要包含四部分:

  • 请求行
  • 请求头
  • 空行
  • 请求体

1. 请求行 request-line

请求行用于说明请求类型,以及要访问的资源和使用的HTTP版本。

请求行以一个方法符号开头,以空格分隔,后跟请求的URI和协议的版本。
例如:GET /562f25980001b1b106000338.jpg HTTP/1.1
例如:POST / HTTP1.1

HTTP定义了很多于服务器交互的方法

  • GET 向Web服务器请求一个文件
  • POST 向Web服务器发送数据,并让Web服务器进行处理。
  • PUT 向Web服务器发送数据,并存储在Web服务器内部。
  • HEAD 检查一个对象是否存在
  • DELETE 从Web服务器上删除一个文件
  • CONNECT 对通道提供支持
  • TRACE 跟踪到服务器的路径
  • OPTIONS 查询Web服务器的性能

可以使用一个URL地址来描述一个网络上的资源,而HTTP的GETPOSTPUTDELETE对应着对这个资源的查、改、增、删四个操作。

什么是URL呢?

URL全程Uniform Resource Location统一资源定位,用于描述网络上的一个资源。

URL基本格式如下:

schema://host[:port#]/path/.../[?query-string][#anchor]
  • schema 指定底层使用的协议类型,如HTTP、HTTPS、FTP...
  • host HTTP服务器的IP地址或域名
  • port HTTP服务器的端口,默认80可省略。
  • path 访问资源的路径
  • query-string 发送给HTTP服务器的数据
  • anchor 锚点

2. 请求头 headers

请求头headers用于指定服务器要使用的附加信息

HOST

  • HOST表示请求的目的地,也就是请求的Web服务器域名地址。
  • HOST请求报头域主要用来指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来。

用法:Host www.hostname.com

User-Agent

  • User-Agent记录着HTTP客户端运行的浏览器类型的详细信息,Web服务器可通过User-Agent判断当前HTTP请求客户端浏览器的类别。
  • User-Agent表示服务器和客户端脚本都能够访问它,是浏览器类型检测逻辑的重要基础。
  • User-Agent由浏览器来定义且会在每个请求中自动发送

用法:User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11

Accept

  • Accept的作用是向Web服务器申明客户端浏览器可以接收的媒体类型(MIME)的资源,简单来说就是表示浏览器支持的MIME类型。
  • Accept媒体类型中的先后次序表示客户端接收的先后顺序
  • Accept中可以使用通配符*/*表示任意类型的数据

用法:Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

MIME

MIME全程Multipurpose Internet Mail Extension多功能互联网邮件扩展服务,是一种多用户网际邮件扩展协议,于1992年应用于电子邮件系统,后应用于浏览器。媒体类型又称为内容类型。

媒体类型格式为type/subtype,其中type指定大的范围,subtypetype中范围更为明确的类型,即大类中的小类。例如text/html、application/xhtml+xml、application/xml...

Text是指用于标准化表示的文本信息,文本消息可以是多种字符集或多种格式。

  • text/html 表示HTML文档

Application是指用于传输的应用程序数据或二进制数据

  • application/xhtml+xml 表示xHTML文档
  • application/xml 表示XML文档

Accept-Language

Accept-Language指定HTTP客户端浏览器用来返回信息时优先选择的语言

用法:Accept-Language: zh-cn,zh;q=0.5

含义:浏览器支持的语言分别是中文和简体中文,优先支持简体中文。

说明:

  • zh-cn表示简体中文
  • zh 表示中文
  • q 表示权重系数,范围0~1,q值越大请求越倾向于获取;之前的类型所表示的内容,若没有指定q值则默认为1。若q值为0则用于提醒服务器哪些是浏览器不接受的内容类型。

Accept-Encoding

  • Accept-Encoding指定客户端浏览器可以支持的Web服务器返回内容压缩编码的类型
  • Accept-Encoding允许Web服务器将输出内容发回客户端之前进行压缩,以节约带宽。这里设置的就是客户端浏览器所能够支持的压缩格式。

简单来说,就是Web服务器在给客户端返回页面数据之前,将数据以gzip格式进行压缩,也节省带宽,加快传输。

用法:Accept-Encoding: gzip,deflate
含义:浏览器有能力解码的编码类型为gzip和deflat
说明:

  • gzip 是GNU zip的缩写,是GNU自由软件的文件压缩程序,也用来表示gzip文件格式。
  • deflate 使用LZ77算法于哈夫曼编码(Huffman Coding)的一种无损压缩算法

Accept-Charset

Accept-Charset指定浏览器可以接受的字符编码集

用法:Accept-Charset: gb2312, utf-8; q=0.7, *;q=0.7
含义:浏览器支持的字符编码分别是gb2312、utf-8和任意字符,优先顺序为gb2312、utf-8、*。

Content-Type

Content-Type表示HTTP请求提交的内容类型,只有在POST方法提交时才需要设置此属性。

用法:Content-Type: application/x-www-form-urlencoded;charset:UTF-8

当使用POST方式提交数据时,Content-Type属性值支持两种编码类型:

  1. application/x-www-form-urlencode

默认缺省的编码类型,表单向Web服务器提交数据时所采用的编码类型。

当向Web服务器发送大量文本、包含非ASCII字符的文本、二进制数据时采用这种编码方式效率很低。

  1. multipart/form-data

文件上传时所使用的编码类型,它既可以发送文本数据,也支持二进制数据上传。

在Content-Type属性中还可以指定提交内容的Charset字符编码

Content-Length

Content-Type是请求体内容的长度,单位字节(byte),并不包含请求行和请求头的数据长度。

Connection

Connection表示是否需要持久连接,如果Web服务器接收到Connection的属性值为Keep-Alive,或者请求所使用的协议版本是HTTP 1.1(默认持久连接),此时就会采用持久连接。

可以利用持久连接的优点,当页面包含多个元素时,可以显著的减少下载所需的时间。要实现这一点,Web服务器需要在返回给客户端的HTTP头信息中加入Content-Length信息正文的长度。

用法:Connection: keep-alive

当一个Web页面打开时,客户端和Web服务器之间用于传输HTTP数据库的TCP连接不会关闭,如果客户端再次访问Web服务器上的网页,会继续使用这条已经建立的连接。

用法:Connection: close

close表示一个Requset请求完成后,客户端和Web服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request请求时,需要重新建立TCP连接。

Keep-Alive

早期的HTTP请求是一站式连接,从HTTP协议1.1版本之后就开始支持长连接。长连接简单来说,就是在Keep-Alive规定的时间内连接不会断开。

Keep-Alive指定HTTP持久连接的时长,用来保证客户端到服务器的连接持续有效。当出现对服务器的后续请求时,Keep-Alive可以避免重建连接。

用法:Keep-Alive:300

Cookie

由于HTTP是无状态的,同一个客户端的这次请求和上次请求是没有关系的,对HTTP服务器来说,它并不知道这两个请求是否来自同一个客户端。为了解决这个问题,Web程序引入了Cookie机制来维护状态。

Cookie用于存放一些用户信息以便于让Web服务器辨别用户的身份,比如cookie会存储用户的账户和密码,当用户登录后就会在客户端产生一些cookie来存储相关信息,这样浏览器通过读取cookie中的信息,然后去Web服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。

当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储在cookie里面,例如sessionid等。

当HTTP请求发送时,会把保存在该请求域名下所有cookie值,一起发送给Web服务器。

Refer

Refer包含了一个URL,表示用户从该URL页面触发访问当前请求的页面。

例如:个人主页中的外链,外链所在服务器可以根据Refer统计出每天从个人主页达到的访客数量。

Pragma

Progma: no-cache 可应用于HTTP1.0和HTTP1.1

Cache-Control

Cache-Control用于指定请求和响应遵循的缓存机制,在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。

请求时的缓存指令包含:

  • no-cache 指示请求或响应消息不能缓存,只能应用于HTTP1.1。
  • no-store 用于防止重要的信息被无意的发布,在请求消息中发送将使得请求和响应消息都不使用缓存。
  • max-age 指示客户端可以接收生存期不大于指定时间的响应,以秒为单位。
  • max-stale 指示客户端可以接收超出超时期间的响应消息,如果指定max-stale消息的值,那么客户端可以接收超出超时期指定值之内的响应消息。
  • min-fresh 指示客户端可以接收响应时间小于当前时间加上指定时间的响应
  • only-if-cached

响应消息中的指令包含

  • public 指示响应可以被任何缓存区缓存
  • private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。它允许服务器仅仅描述当前用户的部分响应消息,此响应消息对于其它用户的请求无效。
  • no-cache
  • no-store
  • no-transform
  • must-revalidate
  • proxy-revalidate
  • max-age

3. 空行

4. 请求数据

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