http协议及历史
http属于与:应用层 端口:80 https :443
七层:1物理》2数据链路 | 3网络 | 4传输 | 5会话》6表示》7应用 |
---|---|---|---|
四层:1物理 | 2网络 | 3传输 | 4应用 |
91年http0.9版本 | 只有一个命令GET
96年http1.0版本|GET HEAD POST
97年http1.1版本 | GET HEAD POST OPTIONS PUT DELETE TRACE CONNECT增加http默认持久连接
15年http/2 版本 增加多工 数据流 头部压缩 服务器推送
http请求
一个http请求包含四部分:
1请求方式 /协议/版本
eg: GET /HTTP/1.1
动词包括:GET、POST、HEAD、PUT、DELETE、TRACE OPTIONS。
2 请求头
Key: value
Key: value
Key: value
请求头包含有关的客户端环境和请求正文的信息。其中Content-Type标注了第4部分的格式。
3一个回车
请求头和请求正文之间是一个空行,表示请求头已经结束,接下来的部分是请求正文。
4请求正文(可以为空)
标准格式:
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: [http://localhost/](https://link.jianshu.com?t=http://localhost/)
Content-Length:25
Content-Type:application/x-www-form-urlencoded
空行
username=aa&password=1234 请求数据
http响应
1 协议/版本号 状态码 状态码描述
如:HTTP/1.1 200 OK
1xx: 信息—表示请求已接收,继续处理。
2xx: 成功—表示请求已经被成功接收、理解、接受。
3xx: 重定向—要完成请求必须进行更进一步的操作。
4xx: 客户端错误—请求有语法错误或请求无法实现。
5xx: 服务器端错误—服务器未能实现合法的请求。
常见状态码说明
200 OK //客户端请求成功
301:永久重定向
302:临时重定向
303:重定向,即从原url重定向到新的url。 例如php 的hear函数header("localtion:/index.php")
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务,一般是服务器路径没有权限或者是其他权限相关问题
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误:一般来说,这个问题都会在服务器端的源代码出现错误时出现,比如出现死循环。
502 Bad Gateway//作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。比如LNMP ,php-fpm没有启动就会报502错误。
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常,比如java 容器部署war的时候,就出现503,或者是nginx处理的文件没有权限。
504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应,比如nginx和php-fpm, php设置sleep(200),就会收到504 Gateway Time-out。注意:某些代理服务器在DNS查询超时时会返回400或者500错误
2响应头
Key1: value1
Key2: value2
Content-Type: text/html;charset=utf-8
其中Content-Type标注了第4部分的格式。
3一个回车(\n)
和请求类似,响应头和响应正文之间是一个空行。
4响应正文(可以很长很长很长)
响应正文对应浏览器要下载的内容。
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
25
This is the data in the first chunk
1C
and this is the second one
3
con
8
sequence
0
使用chrom浏览器查看http请求及响应:
curl -o [文件名] www.baidu.com 和wget一样下载文件
curl -i www.baidu.com 查看头部信息及网页源码 (-I 只显示http response的头信息)
curl -v www.sina.com 显示一次http通信的整个过程,包括端口连接和http request头信息
具体参考
https://www.cnblogs.com/machao/p/5788425.html :HTTP Method的讲解
http://www.ruanyifeng.com/blog/2016/08/http.html :http简单讲解-阮一峰
https://segmentfault.com/a/1190000013924583 :使用cherom查看http头部请求和响应
http://www.ruanyifeng.com/blog/2011/09/curl.html :curl常见使用-阮一峰