关于HTTP

2018-07-18  本文已影响0人  jackie季

HTTP(HyperText Transfer Protocol):它是一个服务器(Server)客户端(Client)之间请求与响应的标准,客户端发起一个HTTP请求,服务器端默认在80端口进行接收,然后服务器返回响应内容,客户端再下载响应内容;

在这里,HTTP就起到了一个指导双方如何沟通的作用,比如客户端输错一个网址字母,服务器端返回404告诉你没有找到这个网址;服务器宕机了,会返回500告诉你服务器无法处理请求;

下面我们来做一个HTTP请求与响应的示例:

打开bash,我们通过curl来创造请求(curl是一种利用URL语法在命令行方式下工作的开源文件传输工具),输入命令:curl -s -v -H "Frank: xxx" -- "https://www.baidu.com"

这相当于用get方式发送了一个请求,请求的内容为:

GET / HTTP/1.1

Host: www.baidu.com

User-Agent: curl/7.54.0

Accept: */*

Frank: xxx

输入命令: curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"

这相当于用post方式发送了一个请求,请求的内容为:

POST / HTTP/1.1

Host: www.baidu.com

User-Agent: curl/7.54.0

Accept: */*

Frank: xxx

Content-Length: 10

Content-Type: application/x-www-form-urlencoded

1234567890

所以,请求格式就包含以下几个部分:

1 动词 路径 协议/版本

2 key : value

3 空行

4 上传的数据

注意:a. 请求最多包含四部分,最少三部分,也就是第四部分可以没有

b. 动词包括 get,post,put(整体更新),patch(局部更新),delete(删除)

c. 路径包含查询字符串,不包含锚点,不写默认为“/”’

d. 第二部分的Content-Type标注了第四部分的数据格式

e. 第三部分永远为空

下面我们通过Chrome来发送请求:

1.打开 Network

2.地址栏输入网址

3.在 Network 点击,然后查看 Request Headers,点击「view source」就看到了请求内容

响应

上面第一个请求示例所得到响应内容是:

HTTP/1.1 200 OK

Accept-Ranges: bytes

Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform

Connection: Keep-Alive

Content-Length: 2443

Content-Type: text/html

Date: Tue, 10 Oct 2017 09:14:05 GMT

Etag: "5886041d-98b"

Last-Modified: Mon, 23 Jan 2017 13:24:45 GMT

Pragma: no-cache

Server: bfe/1.0.8.18

Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

<!DOCTYPE html> 后面省略......

所以响应内容的格式就是:

1 协议/版本 状态码 状态解释

2 key : value

3 空行

4 客户端要下载的内容

再回到刚才的Chrome页面,查看 Response Headers,就可以看到响应内容

对于响应内容中的HTTP状态码,它的第一位数字就代表了响应的状态

1XX:表示服务器已接受请求,但需要继续处理,HTTP协议中未定义,所以禁止服务器使用

2XX:表示成功;200 OK :请求已成功,请求所希望的响应头或数据体将随此响应返回;

           204 No Content:服务器成功处理了请求,没有返回任何内容

3XX:表示重定向,重定向目标会在本次响应的Location域中指明;301代表资源永久移走,302代表临时移走

4XX:表示客户端错误;401,403,404

5XX:表示服务器错误;500,502

详细内容请访问 https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81

上一篇下一篇

猜你喜欢

热点阅读