Http是什么?
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议),用于万维网(www:World Wide Web)服务器传输超文本到浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)
用于 HTTP 协议交互的信息被称为 HTTP 报文。 请求端(客户端) 的HTTP 报文叫做请求报文, 响应端(服务器端) 的叫做响应报文。HTTP 报文本身是由多行(用 CR+LF 作换行符) 数据构成的字符串文本。
HTTP的工作原理
HTTP消息结构:
一个HTTP请求报文由请求行(request line)、请求头(request header) 、空行和请求数据四部分组成。
请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段构成。
例如:GET / index/html HTTP/1.1即为GET请求、URL为index.html、HTTP版本为1.1 。
HTTP1.0定义了三种请求方法:GET、POST和HEAD方法。
HTTP1.1新增五种请求方法:OPTIONS、PUT、DELETE、TRACE和CONNECT方法
GET请求
这是常见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的链接或者通过浏览器的地址栏输入网址来浏览网页,使用的都是GET方式。 GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(?)代表URL的结尾与请求参数的开始,传递参数长度受限制。如:/index.jsp?id=100&op=bind,这样通过GET方式传递的数据直接表示在地址中, 所以我们可以把请求结果以链接的形式发送。
以火狐搜索“许嵩”为例:
地址中的“?”之后的部分就是通过GET发送的请求数据,我们可以在地址栏中清楚看到,各个数据之间用&符号分开,显然,这种方式不适合传送私密数据, 另外,由于不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合GET请求。
POST请求
POST方法可以允许客户端给服务器提供信息较多。POST方法将请求封装在HTTP请求数据中,也就是在body中,以名称/值 键值对的形式出现,可以传输大量数据,这样POST请求方式对传送给的数据大小没有限制,也不会显示在URL中。
HEAD请求
HEAD就像GET,只不过服务端接收到HEAD请求后只返回响应头,而不会发送响应内容,当我们只需要查看某个页面的状态时,使用HEAD是非常高效的,因为在传输的过程中省略了页面内容。
请求头
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号:分隔。请求头部通知服务器关于客户端请求的信息,典型的请求头有:
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
空行
最后一个请求之后是一个空行,发送回车和换行符,通知服务器以下不再有请求头
请求数据
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头Content-Type和Content-Length。
示例
HTTP响应消息
HTTP响应也由四部分构成,分别是状态行、效应头、空行、响应正文。
状态行
状态行通过状态码说明所请求的资源情况
HTTP状态码的因为HTTP Status Code。状态码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
1xx : 指示信息 – 表示请求已接收,继续处理
2xx : 成功 – 表示请求已被成功接收,理解
3xx : 重定向 – 要完成请求必须进行更进一步的操作
4xx : 客户端错误 – 请求有语法错误或请求无法实现
5xx : 服务器端错误 – 服务器未能实现合法的请求
关于状态码的简介可以看一下HTTP状态码、HTTP和HTTPS
响应头
Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。