HTTP文件协议介绍

来源:互联网 发布:java并发从入门到精通 编辑:程序博客网 时间:2024/06/08 16:21

HTTP文件协议介绍

写在前面:本文只是http文件协议的介绍,不是http协议介绍,故不包括dns解析等其他内容,旨在从应用层面介绍http文件。

1.HTTP简介

1.1 HTTP协议的简介与作用

http协议是建立在tcp协议80(默认)端口上的一个通讯协议,有了这个通讯协议,在两台机器中就可以通过URL接收与发送内容。


程序员们站在http层上进行开发,不必关心该层以下的内容,甚至无需了解tcp协议,这也是计算机中“抽象”思想的体现。web界就是在http协议的基础上诞生的,当然现在也有很多其应用在使用http协议,例如移动端app、嵌入式智能硬件等。




图1-1 HTTP协议在TCP/IP四层结构中的位置


1.2 web工作流程

我们在浏览器访问一个站点,在输入URL以后,浏览器与服务器的工作流程是这样的,如图1-2。




图1-2 web请求与响应过程



浏览器向URL所指的服务器发送了一个http request文件,服务器接收到这个文件后,返回一个http response文件。浏览器从response文件解析出html文件,并显示在屏幕上。(获取css、js等静态文件也是这个流程,同样放在http response文件中。)

2.HTTP文件介绍

2.1 HTTP文件分类

HTTP文件分为两种,request文件和response文件,request文件又分为GET、POST、HEAD等多种,在web领域最常用的就是GET和POST。



图2-1 http文件分类


2.2 request 文件

request文件一般用来客户端向服务器发请求,由head和body(可选)组成。

  1. GET文件:

    只有head,没有body,每个Header一行一个,换行符是\r\n,格式如下:

    GET /path HTTP/1.1  Header1: Value1Header2: Value2Header3: Value3

    实例:访问www.baidu.com的request文件就是GET。

    GET / HTTP/1.1Host: www.baidu.comConnection: keep-aliveAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36Accept-Encoding: gzip, deflate, sdchAccept-Language: zh-CN,zh;q=0.8,en;q=0.6Cookie: ********
  2. POST文件

    每个Header一行一个,换行符是\r\n,当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body,格式如下:

    POST /path HTTP/1.1Header1: Value1Header2: Value2Header3: Value3body data goes here...

    POST 文件实例,以提交form表单为例。该表单的html代码如下,name输入liuweijie,password输入123456;

    <form action="/userData" method="post">    name:<input type = "text" name = "name"><br/>    password:<input type = "password" name = "password"><br>    <input type = "submit" name="submit"></form>

    提交出去的POST文件如下:

    POST /userData HTTP/1.1Host: localhost:63342Connection: keep-aliveContent-Length: 56Cache-Control: max-age=0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Origin: http://localhost:63342Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36Content-Type: application/x-www-form-urlencodedReferer: http://localhost:63342/htmlLearning/index.htmlAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.8,en;q=0.6Cookie: *******name=liuweijie&password=123456&submit=%E6%8F%90%E4%BA%A4

    可以看到POST文件把form的参数放到了body处,例子中是以明文的形式,这样很不安全,一般body中的内容我们都要进行加密。

  3. GET与POST的区别

    引用百度知道里的一个回答,从应用角度上来讲,我觉得回答的非常好。至于本质的区别,没有必要去深究,当然如果有兴趣,可以看这篇文章GET和POST的真正区别




    图2-2 GET与POST的区别



    GET主要用来发送请求,POST用来提交数据。当然GET也可以通过URL传参的方法提交少量数据。

2.3 response文件

response文件一般用来客服务器向客户端回复信息,由head和body组成。

一个response文件的格式如下:

HTTP/1.1 Status-Code Reason-PhraseHeader1: Value1Header2: Value2Header3: Value3body data goes here...

Status-Code是状态吗,200表示正常,404表示没有找到页面。 Reason-Phrase是状态的语言描述。例如200 OK就表示一切正常且成功。状态码有很多种,这里不一一列举,可自行百度谷歌。


下面response文件实例,是上文中请求www.baidu.com发出的request的回应。

HTTP/1.1 200 OKServer: bfe/1.0.8.5Date: Sat, 01 Aug 2015 13:59:05 GMTContent-Type: text/html;charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveCache-Control: privateExpires: Sat, 01 Aug 2015 13:59:05 GMTContent-Encoding: gzipX-UA-Compatible: IE=Edge,chrome=1BDPAGETYPE: 2BDQID: 0x990999ea000175adBDUSERID: 1073794219Set-Cookie: ****Set-Cookie: ****Set-Cookie: ****Set-Cookie: ****body including html is too long to paste here,

参考文章

0 0
原创粉丝点击