HTTP协议
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
数据格式
请求和返回是一样的数据格式,分为4部分:
- 请求行或者响应行
- Header(请求的 Header 中 Host 字段是必须的,其他都是可选)
- \r\n\r\n(连续两个换行回车符,用来分隔Header和Body)
- Body(可选)、
请求的格式,注意大小写(这是一个不包含Body的请求):
原始数据如下'GET / HTTP/1.1\r\nhost:g.cn\r\n\r\n'打印出来如下GET / HTTP/1.1Host: g.cn其中1, GET 是请求方法(还有POST等,这就是个标志字符串而已)2,/ 是请求的路径(这代表根路径)3,HTTP/1.1 中,1.1是版本号,通用了20年具体字符串是 'GET / HTTP/1.1\r\nhost:g.cn\r\n\r\n'
返回的数据如下
HTTP/1.1 301 Moved PermanentlyAlternate-Protocol: 80:quic,p=0,80:quic,p=0Cache-Control: private, max-age=2592000Content-Length: 218Content-Type: text/html; charset=UTF-8Date: Tue, 08 Jul 2018 02:30:25 GMTExpires: Tue, 08 Jul 2018 02:30:25 GMTLocation: http://www.google.cn/Server: gwsX-Frame-Options: SAMEORIGINX-XSS-Protection: 1; mode=blockBody部分太长,先不贴了其中响应行(第一行):1,HTTP/1.1 是版本2,301 是「状态码」,参见文末链接3,Moved Permanently 是状态码的描述浏览器会自己解析Header部分,然后将Body显示成网页
HTTP之状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受 3xx:重定向--要完成请求必须进行更进一步的操作 4xx:客户端错误--请求有语法错误或请求无法实现 5xx:服务器端错误--服务器未能实现合法的请求常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden //服务器收到请求,但是拒绝提供服务 404 Not Found //请求资源不存在,eg:输入了错误的URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常HTTP请求方法
- 根据HTTP标准,HTTP请求可以使用多种请求方法。
- HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
- HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 PUT 从客户端向服务器传送的数据取代指定的文档的内容。 DELETE 请求服务器删除指定的页面。 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 OPTIONS 允许客户端查看服务器的性能。 TRACE 回显服务器收到的请求,主要用于测试或诊断。