您的位置:首页 > 理论基础 > 计算机网络

Http - Web世界的幕后神兵

2017-12-26 20:11 211 查看
在之前的工作中,一次项目就是使用H5+Ajax打包制作了一个App,其实对之前的知识点和实践都属于那种模糊的概念,所以梳理了,吐槽大会里说,这是一个知识点,En。



http协议是Tcp/Ip族的一员,我是这样理解的http方便了资源的访问和,连接着彼此,如上图,不管我用手机、笔记本、PC机的访问媒介,还是我在家,在公司,在任何一个地方都能很便利的访问到云上的资源,下图更好理解些。



数据的传输就是从发送端传输到接受端的交互过程,http存在于TCP/IP模型中的应用层,经过层层认证,成对出现,有点像对称加密一样,在看不见摸不着的世界里创造出来这些,人类真的是智慧无比的,此处可以有掌声。



下面是我架构Mr.Y1.0的架构思想,用Cms是输入端输入数据,然后以接口的以json的形式传递和处理,以协议的方式去定义,进行统一的管理,防止代码中的错乱,整体思想是一个应用只做一件事儿,之后会用Python去自动抓取数据,让新闻自动抓取,自动更新和发布,打造成智能新闻系统。(暂时没有什么好的想法,暂时只想到这么多)



我的做法是使用的是Mui前端框架,是Js封装了原生的调用,很了不起的(想法),比ecMobile方便了许多,可以随便玩耍玩耍,实践才能成长。Mui的部分我就不做阐述了,文档写的超级清楚,这得你自己去实践起来,想的多做的少是不可取的。http://dev.dcloud.net.cn/mui/ui/(mui文档地址)

HTTP协议工作步骤:

1)客户机与服务器需要建立连接。单击某个超链接,HTTP协议的工作开始。

2)建立连接后,客户机发送一个请求给服务器。格式为:前边是统一资源标识符(URL)、中间是协议版本号,后边是MIME信息(包括请求修饰符、客户机信息和可能的内容)。

3)服务器接到请求后,给予相应的响应信息。格式为:首先是一个状态行(包括信息的协议版本号、一个成功或错误的代码),然后是MIME信息(包括服务器信息、实体信息和可能的内容)。

4)客户端接收服务器返回的信息并显示在用户的显示屏上,然后客户机与服务器断开连接。



直观上图,Http通用头域,请求消息,响应消息,下面介绍几个重要的参数:

// 指定允许其他域名访问
header('Access-Control-Allow-Origin:*');
// 响应类型
header('Access-Control-Allow-Methods:GET');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,content-type');
//设置长连接
header("Connection:Keep-Alive");
header("Proxy-Connection:Keep-Alive");
//Host 请求的域名

//User-Agent
//HTTP客户端运行的浏览器类型的详细信息。通过该头部信息,web服务器可以判断到当前HTTP请求的客户端浏览器类别

//Accept
//指定客户端能够接收的内容类型,内容类型中的先后次序表示客户端接收的先后次序。

//Accept-Encoding
//指定客户端浏览器可以支持的web服务器返回内容压缩编码类型

//Content-Type
//显示此HTTP请求提交的内容类型。一般只有post提交时才需要设置该属性

//Connection
//表示是否需要持久连接。如果web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1

//cookie
//包含一个URL,用户从该URL代表的页面出发访问当前请求的页面


$httpinfo = get_headers('http://www.baidu.com', 1);
print_r($httpinfo);

Array
(
[0] => HTTP/1.1 200 OK
[Date] => Sat, 24 Oct 2015 05:20:47 GMT
[Content-Type] => text/html
[Content-Length] => 14613
[Last-Modified] => Tue, 02 Sep 2014 08:55:13 GMT
[Connection] => Close
[Vary] => Accept-Encoding
[Set-Cookie] => Array
(
[0] => BAIDUID=57422D9DF880F51C9236D0AAC5AB11BA:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[1] => BIDUPSID=57422D9DF880F51C9236D0AAC5AB11BA; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[2] => PSTM=1445664047; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[3] => BDSVRTM=0; path=/
)

[P3P] => CP=" OTI DSP COR IVA OUR IND COM "
[Server] => BWS/1.1
[X-UA-Compatible] => IE=Edge,chrome=1
[Pragma] => no-cache
[Cache-control] => no-cache
[BDPAGETYPE] => 1
[BDQID] => 0xe5d2f28c001a4c17
[BDUSERID] => 0
[Accept-Ranges] => bytes
)

$fp = fopen('http://www.baidu.com/', 'r');
print_r(stream_get_meta_data($fp));
fclose($fp);

Array
(
[wrapper_data] => Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Sat, 24 Oct 2015 05:45:19 GMT
[2] => Content-Type: text/html
[3] => Content-Length: 14613
[4] => Last-Modified: Tue, 02 Sep 2014 08:55:13 GMT
[5] => Connection: Close
[6] => Vary: Accept-Encoding
[7] => Set-Cookie: BAIDUID=3D2EF009AB73DEF6A808146A1CB6BEF5:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[8] => Set-Cookie: BIDUPSID=3D2EF009AB73DEF6A808146A1CB6BEF5; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[9] => Set-Cookie: PSTM=1445665519; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[10] => Set-Cookie: BDSVRTM=0; path=/
[11] => P3P: CP=" OTI DSP COR IVA OUR IND COM "
[12] => Server: BWS/1.1
[13] => X-UA-Compatible: IE=Edge,chrome=1
[14] => Pragma: no-cache
[15] => Cache-control: no-cache
[16] => BDPAGETYPE: 1
[17] => BDQID: 0xb0560df000168912
[18] => BDUSERID: 0
[19] => Accept-Ranges: bytes
)

[wrapper_type] => http
[stream_type] => tcp_socket
[mode] => r
[unread_bytes] => 0
[seekable] =>
[uri] => http://www.baidu.com/ [timed_out] =>
[blocked] => 1
[eof] =>
)

$html = file_get_contents('http://www.baidu.com/');
print_r($http_response_header);

$data = array(
'dopost' => 'send',
'comtype' => 'comments',
'aid' => 1083,
'fid' => 0,
'msg' => '轻轻的我来了',
'username' => 'car',
'notuser' => '',
'face' => 6,
'feedbacktype' => 'feedback',
'pwd' => '',
'validate' => '',
);

$data = http_build_query($data);
curl和socket在这里就不多说了


技术有圈,分享无界,每天多进步一点,谢谢你的光临~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web