notes about HTTP

HTTP协议

liuc: 在浏览器里输入192.168.236.128,对应访问的是服务器的哪个进程?该进程又怎么会显示出来这个页面?[hint: 学习一下HTTP协议]

Reference:

聊聊Socket、TCP/IP、HTTP、FTP及网络编程

HTTP协议是建立在TCP协议之上的一种应用,HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立TCP连接,而且需要客户端向服务器发出请求后,请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息,服务器端才能回复数据,包含消息的协议版本、一个成功和失败码以 及相关的MIME式样的消息。在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。由于HTTP在每次请求结束后都会主动释放连 接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保 持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。一次TCP链接的建立将需要3次握手。

另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时间(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数 据,只是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法。HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求 /响应消息,因此减少了链接建立的次数和经常性的链接开销。

结论:HTTP是应用层协议,其传输都是被包装成TCP协议传输。可以用SOCKET实现HTTP。SOCKET是实现传输层协议的一种编程API,可以是TCP,也可以是UDP。

从日常开发说起,浅谈HTTP协议是做什么的

一次WEB资源请求的过程,其实就和一次方法调用特别相似,上面小A的程序其实就相当于浏览器,小B的程序就相当于服务器,而小B提供的方法就相当于服务器上的资源。上面咱们分析了方法调用的过程,咱们来看看一次WEB资源请求大致分为哪三步。

1,浏览器需要根据某种字符串格式(类似于故事当中的【类名.方法(参数列表)】的方式)找到服务器当中的资源。

2,浏览器传给服务器一个请求,服务器对这个请求进行相应的处理(比如增删改查)。

3,服务器根据处理结果返回给浏览器,浏览器根据返回结果进行相应的处理(比如显示网页,显示图片等)。

HTTP 协议漫谈

通信协议:HTTP、TCP、UDP

Linux Socket编程(不限Linux)

我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

IP地址标记了网络中的主机,端口默认为80,因此访问的是默认端口80的服务器进程。

一次完整的HTTP事务是怎样一个过程?

域名解析 –> 发起TCP的3次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) –> 浏览器对页面进行渲染呈现给用户

我们不需要进行域名解析,因此经历了以下步骤:

发起TCP的3次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) –> 浏览器对页面进行渲染呈现给用户

(详细的解释都可以在这个参考的链接里找到。与当在浏览器地址栏输入一个URL后回车,将会发生的事情? 类似。)

查看端口监听程序

liuc:再进一步,如何查看80端口监听的程序是哪一个?

centos 查看系统监听的端口

netstat -[atunlp]

-a :all,表示列出所有的连接,服务监听,Socket资料

-t :tcp,列出tcp协议的服务

-u :udp,列出udp协议的服务

-n :port number, 用端口号来显示

-l :listening,列出当前监听服务

-p :program,列出服务程序的PID

使用netstat -anp
提示需要root权限。

su -后再次netstat -anp
得到

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1844/httpd

[root@localhost ~]# lsof -i :80

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

httpd 1844 root 5u IPv4 24312 0t0 TCP *:http (LISTEN)

httpd 2212 scalr-app 5u IPv4 24312 0t0 TCP *:http (LISTEN)

httpd 2214 scalr-app 5u IPv4 24312 0t0 TCP *:http (LISTEN)

firefox 8039 small 306u IPv4 210198 0t0 TCP 192.168.236.128:40283->202.89.233.104:http (ESTABLISHED)

httpd 8116 scalr-app 5u IPv4 24312 0t0 TCP *:http (LISTEN)

httpd 8117 scalr-app 5u IPv4 24312 0t0 TCP *:http (LISTEN)

httpd 8136 scalr-app 5u IPv4 24312 0t0 TCP *:http (LISTEN)

httpd 8161 scalr-app 5u IPv4 24312 0t0 TCP *:http (LISTEN)

httpd 8177 scalr-app 5u IPv4 24312 0t0 TCP *:http (LISTEN)

httpd 24457 scalr-app 5u IPv4 24312 0t0 TCP *:http (LISTEN)

httpd 24473 scalr-app 5u IPv4 24312 0t0 TCP *:http (LISTEN)

httpd 27830 scalr-app 5u IPv4 24312 0t0 TCP *:http (LISTEN)

PID是指进程的ID,每个进程有自己的ID。
Linux系统学习笔记:进程
CentOS进程管理

程序是保存在存储介质中的可执行机器代码(或指令)和数据的集合,而进程是在计算机处理器执行中的计算机程序。他们的关系如下:

程序是保存在外部存储介质中的可执行代码和数据,是静态保存的代码。

进程是程序代码在处理器中的运行,是动态执行的代码。

操作系统在执行程序时,将代码有外部存储介质(硬盘)读取到内部存储介质(内存)中,驻留在内存中的程序代码作为进程在CPU中被动态执行。

Linux是多进程操作系统,每个程序启动时可以创建多个进程,与其他程序创建的进程共同运行在Linux内核空间。每个进程都是一个独立的任务,它们一招操作系统内核制定的规则交替被CPU执行。每个单独的进程运行在自己的虚拟地址空间,并且只能通过安全的内核管理机制与其他进程进行交互。

通过Program Name也可以知道进程是属于哪个程序的。

taskset -p 1844查看进程位置

pid 1844’s current affinity mask: 1

你可以用ps命令查看一下 pid是1844的进程的程序在什么位置。你先熟悉一下scalr的用法,到阅读程序的阶段,你需要了解程序的入口,就要用到ps命令。

ps aux

root 1844 0.0 0.0 401380 112 ? S 10:04 0:01 /opt/scalr-server/embedded/bin/httpd -f /opt/scalr-server/etc/httpd/httpd.c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值