网络基础-->http协议

URL(Uniform Resource Locator)

 基本格式

schema://host[:port]/path[;parameters][?query-string][#anchor]

schema->指明使用哪种网络传输协议(http.https.ftp,file等)

host->服务器域名或者具体的IP地址,就好比一个大局域网的主机名一样。
可以在host名前加入登陆账号和密码(格式:username:password@host)

port->传输端口号,当默认为80时,可以省略。


path->要访问的主机目录或文件地址,就如同访问一个具体路径一样。(a/b/c.txt)

parameters->可选的特殊参数

query-string->传递给主机的参数,参数使用"a=1"格式,多个参数使用"&"分隔

anchor->锚,就是一个子链接,指定到访问文件的固定位置。

举个栗子:

https://zh.wikipedia.org/wiki/超文本传输协议#0.9  

schema->https

host->zh.wikipedia.org

path->/wiki/超文本传输协议

anchor->0.9

通信方式

简单点说就是一个消息机制。

1、客户端发送请求。

2、服务器根据请求的类型而返回不同的数据。

3、客户端解析服务器返回数据而做出相应的显示。

注意:请求都是无状态的(服务器并不知道客户端当前处于什么状态),一次请求交互就意味着一次通信完成,客户端与服务器可以断开连接。

所以一般形成一个完善的网页显示,需要发送多次请求。

消息结构

请求消息结构

由4部分组成:

1、请求行

格式:method[空格]/path[空格]HTTP/version

2、请求头

用于表明请求的配置参数

3、换行

4、请求体

请求具体的信息参数 

响应消息结构

1、响应行(状态行)

格式:HTTP/version[空格]status code[空格]message

2、响应头

表明响应的配置参数

3、换行

4、响应体

响应的具体信息

关于请求消息结构

请求行

method

请求的方法,有如下几种:(大写)

OPTIONS:使服务器返回当前资源所支持的所有请求方法,可以用于测试服务器是否正常。

GET:既”显示“请求,用于向服务器请求数据。

HEAD:与GET方法一样,也是请求数据,但是服务器不会回传资源的文本部分。这个可以用于仅仅获取资源的元信息。

POST:向服务器提交修改后的数据,数据包含在请求文本中,服务器将存储数据。

PUT:向服务器上传其增加的内容

DELETE:请求服务器删除Request-URI所标识的资源。

TRACE:回显服务器所受到的请求,用于测试。

CONNECT:将连接改为管道方式,通常用于SSL加密服务器连接

path

此path即为

host[:port]/path[;parameters][?query-string][#anchor]

HTTP/version

其中”HTTP/“是固定字符,version即为http的协议版本,常用的有:HTTP/1.0,HTTP/1.1,HTTP/2

请求头

请求头由多个域组成,常见的有:

cache

If-Modified-Since:时间  (检查是否有更新的页面)

将客户端缓存页面的最后修改时间发送到服务器,服务器与对应文件修改时间相比,若时间一致则会返回304,否则返回200和新文件内容。

If-None-Match:ETag值   (检查资源是否更新)

将上次从服务器获取的ETag值发送,服务器与当前的ETag值对比,若没有改变则返回304,否则返回200和新的资源以及ETag。

说明:ETag与If-Modified-Since目的相同,都是为了检查本地缓存是否需要更新,但是ETag值更优于时间表示法。比如文件仅仅时间

改变了,但是内容没有改变。等等...ETag是实体内容所生成的值,所以更加准确。

Pragma:no-cache (防止页面被缓存)

Cache-Control:缓存机制

缓存机制有:

1、Public 可以被任何缓存所缓存(多用户共享)

2、Private 内容只缓存到私有缓存中(指定单用户使用)

3、no-cache 所有内容都不会被缓存

client

Accept:类型  (表明客户端可以接受的媒体类型)

比如:Accept:text/html

Accept-Encoding:类型 (表明可以接收的压缩编码方法)

比如:Accept-Encoding: gzip, deflate, br

说明:通过压缩可以减少网络传输的数据量,常用解码:

gzip   ---->GNU zip编码

compress --->Unix的文件压缩程序

deflate  --->zlib的格式压缩的

identity -->没有对实体进行编码。当没有Content-Encoding header时, 就默认为这种情况

gzip, compress, deflate  -->无损压缩算法,用于减少传输报文的大小,不会导致信息损失。

Accept-Language:类型 (表明可接收的语言编码)

比如:Accept-Language: zh-CN,zh;q=0.8

User-Agent: 名称 (表明客户端使用的浏览器信息和系统信息)

比如:User-Agent: Chrome WIN 51.0.2704.103 (aa7c8d23c098e96a388ffedf6698230bda650bb3-refs/branch-heads/2704@{#723}) channel(stable)

entity

Content-Length:数值 (请求体的长度,十进制表示)

也就是实际发送内容长度,没有前3部分。

Content-Type:类型  (数据类型)

比如:Content-Type: text/plain;charset=UTF-8

miscellaneous

Referer:信息 (告知从哪个链接过来的)

比如:Referer: https://www.google.com.hk/

transport

Connection:类型 (表明客户端和服务器的连接方式)

比如:Connection: keep-alive

表示客户端和服务器之间的TCP连接不会关闭。

Host:主机和端口号 (指明服务器地址及端口号)

关于响应消息结构

响应行(状态行)

HTTP/version

与请求行意义一样,代表协议版本号。

status code

状态码,用于告知客户端此时服务器返回状态是否正常。有如下几类:

1xx(提示信息):请求已被服务器接收,继续处理

2xx(成功):请求已成功被服务器接收、理解、并接受。

3xx(重定向):需要后续操作才能完成这一请求。

4xx(客户端错误):请求含有词法错误或无法被执行

5xx(服务器错误):服务器在处理某个正确请求时发生错误。

message

状态消息,是对状态码更加详细的解析。常见的状态码及消息:

200 OK

代表响应成功,请求的资源发送至客户端。

302 Found

重定向,代表新的url会在响应消息的Location中返回,然后客户端会使用这个新的url再次发送请求消息,最终得到正确的网页。

比如输入"www.google.com",最终会定位到"www.google.com.hk"

304 Not Modified

代表上次的文档已经被缓存,可以继续使用。

400 Bad Request

客户端请求与语法错误,不能被服务器所理解

403 Forbidden

服务器收到请求,但是拒绝提供服务

404 Not Found

url指定资源不存在

500 Internal Server Error

服务器发生了不可预期的错误

503 Server Unavailable

服务器当前不能处理客户端的请求,一段时间后可能恢复正常

响应头

cache

Date:时间 (生成消息的时间)

比如:Date: Thu, 28 Jul 2016 03:34:31 GMT

Expires:时间 (浏览器会过期时间内使用本地缓存)

比如:Expires: Thu, 28 Jul 2016 03:34:58 GMT

Vary:变化

比如:Vary: Accept-Encoding

cookie/login

Set-Cookie:  (每写入一个cookie都会生成一个set-cookie)

比如:Set-Cookie: SERVERID=9ffd301069c1081a14d128e0c97deda8|1469676872|1469672968;Path=/

说明:cookie是一小段文本,用户保存一些用户信息(没有用户密码等重要信息,一般是使用习惯等),算是对用户状态的一种维持机制。

就好比自动登陆网站一样,保存用户自动登陆设置,所以用ccleaner清除cookie后,很多网站需要设置重新登陆。

entity

ETag:数值 (与请求的If-None-Match 配合使用)

Last-Modified:时间 (最后修改的时间,可与请求的If-Modified-Since配合使用)

Content-Type:类型 (告诉客户端,对象的类型及字符集)

Content-Length:数值 (正文的长度)

不包括前3部分

Content-Encoding:方法 (压缩方法)

Content-Language:语言 (使用的语言)

miscellaneous

Server:信息 (指明服务器软件信息)

比如:Server: Tengine

transport

Connection:类型 (表明客户端和服务器的连接方式)

比如:Connection: keep-alive

表示客户端和服务器之间的TCP连接不会关闭。

代理服务器

代理服务器位于web服务器和web客户端之间的服务器,请求和响应都会通过代理服务器。

代理服务器可以对请求及响应数据进行处理,所以可以:

1、科学上网

2、匿名访问

3、代理缓存,加快上网速度

4、对某些内容指定屏蔽

原文地址:https://www.cnblogs.com/KcMeterCEC/p/5713196.html